Pra*_*wal 20 iphone objective-c nsdata ipad
我有一个NSData对象,长度是4个字节.这四个字节我从另一个NSData对象中提取,使用,
fourByteData=[completeData subdataWithRange:NSMakeRange(0, 16)];
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,上面的语句是否会为我提供完整数据的前四个字节.
如果是,那么如何将所有这些字节转换为等效的int.
zap*_*aph 33
268566528是您期望的值还是您期望的528?如果正确的值是528,那么字节顺序是big-endian但是cpu是little-endian,字节需要反转.
所以,如果正确的值应该是528那么:
NSData *data4 = [completeData subdataWithRange:NSMakeRange(0, 4)];
int value = CFSwapInt32BigToHost(*(int*)([data4 bytes]));
Run Code Online (Sandbox Code Playgroud)
另请注意,网络标准顺序是big-endian.
Suh*_*tel 25
该语句将为您提供前16个字节的数据,而不是4.要获得前4个字节,您需要将语句修改为:
fourByteData = [completeData subdataWithRange:NSMakeRange(0, 4)];
Run Code Online (Sandbox Code Playgroud)
要将NSData对象中的数据读取为整数,您可以执行以下操作:
int theInteger;
[completeData getBytes:&theInteger length:sizeof(theInteger)];
Run Code Online (Sandbox Code Playgroud)
如果只是将它转换为整数,则不需要获取前4个字节.您可以直接从上面的两行和completeData接收器执行此操作
Pey*_*loW 12
不,您将获得16个字节的数据,因为范围是从偏移0到16个字节.
如果你有一个NSData4字节的实例,那么你可以像这样做一个简单的类型转换:
int value = *(int*)([data bytes]);
Run Code Online (Sandbox Code Playgroud)
- (unsigned)parseIntFromData:(NSData *)data{
NSString *dataDescription = [data description];
NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)];
unsigned intData = 0;
NSScanner *scanner = [NSScanner scannerWithString:dataAsString];
[scanner scanHexInt:&intData];
return intData;
}
int numberOfChunks = [self parseIntFromData:data];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29609 次 |
| 最近记录: |