Difference between revisions of "7BITSTR"

From SimsWiki
Jump to: navigation, search
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{OldWikiEntry}} String encoding format used in The Sims and the Sims2
+
String encoding format used in The Sims and The Sims2.
  
The length of the string is Encoded 7 bits at a time before the string
+
The length of the string is Encoded 7 bits at a time before the string.
 
+
seethe fourth post in this thread:
+
http://www.datgen.info/forums/thread.aspx?forumid=13&threadid=48
+
  
 
If you use .NET for developing you can simply read those 7-Bit length encoded Strings with the builtin readString() Method of the BinaryReader Stream.
 
If you use .NET for developing you can simply read those 7-Bit length encoded Strings with the builtin readString() Method of the BinaryReader Stream.
  
[[Category:Modding]]
+
To decode the length for a 7bit-coded string, use the following logic:
 +
 
 +
# Read the first byte, and test the 8th bit. If its set, an extra byte is needed.
 +
# Mask off the 8th bit and store the value.
 +
# Repeat steps 1 and 2 for the next byte until the 8th bit is not set.
 +
# Left-shift the second byte by 7, and add to the first byte.
 +
# Repeat step 4 for each extra byte, increasing the shift by 7 each time.
 +
 
 +
The final result will be the proper length for the string. An example is as follows, assuming the first two bytes are:
 +
 
 +
<tt>
 +
0xE0 0x03
 +
 
 +
> (0x00E0 & 0x007F) + (0x0003<<7)
 +
= 0x0060 + 0x0180
 +
= 0x01E0
 +
</tt>
 +
 
 +
The length of a string with the first two bytes 0xE0 and 0x03 is 0x01E0, or 480 characters. Another example could be:
 +
 
 +
<tt>
 +
0xD8 0x0D
 +
 
 +
> (0x00D8 & 0x007F) + (0x000D<<7)
 +
= 0x0058 + 0x680
 +
= 0x6D8
 +
</tt>
 +
 
 +
The length of the string is 1752 characters.
 +
 
 +
== Sample code: ==
 +
<tt>
 +
int stringLength = 0;
 +
 +
int nextByte = 0;<br/>
 +
int i=0;<br/>
 +
while( ( (nextByte = readUnsignedByte()) & 0x80) != 0)<br/>
 +
{<br/>
 +
stringLength |= (nextByte & 0x7F) << (7*i);<br/>
 +
i++;<br/>
 +
}<br/>
 +
stringLength |= (nextByte & 0x7F) << (7*i);
 +
</tt>
 +
 
 +
 
 +
[[Category:Sims 2 Modding]]
 +
[[Category:InternalFormats]]

Latest revision as of 12:58, 17 September 2012

String encoding format used in The Sims and The Sims2.

The length of the string is Encoded 7 bits at a time before the string.

If you use .NET for developing you can simply read those 7-Bit length encoded Strings with the builtin readString() Method of the BinaryReader Stream.

To decode the length for a 7bit-coded string, use the following logic:

  1. Read the first byte, and test the 8th bit. If its set, an extra byte is needed.
  2. Mask off the 8th bit and store the value.
  3. Repeat steps 1 and 2 for the next byte until the 8th bit is not set.
  4. Left-shift the second byte by 7, and add to the first byte.
  5. Repeat step 4 for each extra byte, increasing the shift by 7 each time.

The final result will be the proper length for the string. An example is as follows, assuming the first two bytes are:

0xE0 0x03

> (0x00E0 & 0x007F) + (0x0003<<7) = 0x0060 + 0x0180 = 0x01E0

The length of a string with the first two bytes 0xE0 and 0x03 is 0x01E0, or 480 characters. Another example could be:

0xD8 0x0D

> (0x00D8 & 0x007F) + (0x000D<<7) = 0x0058 + 0x680 = 0x6D8

The length of the string is 1752 characters.

[edit] Sample code:

int stringLength = 0;

int nextByte = 0;
int i=0;
while( ( (nextByte = readUnsignedByte()) & 0x80) != 0)
{
stringLength |= (nextByte & 0x7F) << (7*i);
i++;
}
stringLength |= (nextByte & 0x7F) << (7*i);

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox