-
to interpret a dataoutputstream i've found a solution.
to read a integer:
use getBytes:range: to save exactly 4 bytes into a UInt32 (take care, 4byte integer).
as mac is little-endian and bytes sent over the network mostly big-endian, you need to NSSwapBigIntToHost() with the UInt32 as argument. That returns the number which you are looking for.
read a string:
first use getBytes:range: to store the first 2 bytes into a UInt16 (take care: 2 bytes integer), which will tell you the length of the string. Also call NSSwapBigIntToHost() with the 2-byte integer as argument, which delivers you the actual length of the string.To get the string, create a buffer of type char with a length equal the number you just got +1 for the nullbyte. use getBytes:range: again to get the data of the string. the argument for range: must contain the length of the string which we just found out. After that terminate the string (the buffer) with '\0' to set the nullbyte. Now create a NSString object using initWithCString:encoding: and use NSUTF8StringEncoding as encoding.
由此 ,将NSData模拟为Java中的ByteBuffer
//write byte
- (void)putByte:(char)v
{
[self put:&v length:sizeof(v)];
}
- (void)putBytes:(char*)v length:len
{
[self put:v length:len];
}
//write short
- (void)putShort:(short)v
{
v = NSSwapBigShortToHost(v);
[self put:&v length:sizeof(v)];
}
//write int
- (void)putInt:(int)v
{
v = NSSwapBigIntToHost(v);
[self put:&v length:sizeof(v)];
}
//write longlong
- (void)putLongLong:(long long int)v
{
v = NSSwapBigLongLongToHost(v);
[self put:&v length:sizeof(v)];
}
ios之字节序
最新推荐文章于 2020-11-28 18:25:10 发布