Ios 如何读取存储在NSData中的二进制数据

Ios 如何读取存储在NSData中的二进制数据,ios,iphone,ipad,Ios,Iphone,Ipad,我正在从网络通话中获取数据。这是数据 0000000 1 00045043 4c4e0000 00023744 92f4cd44 92f4cd44 92f4cd44 92f4cd3c a3d70a00 00014de2 b767a044 93800044 93800044 93800044 93800040 a0000000 00014de2 bdd04044 94400044 94400044 93db3344 94170a3f a6666600 00014de2 c8ccc044 93ddc

我正在从网络通话中获取数据。这是数据

0000000 1 00045043 4c4e0000 00023744 92f4cd44 92f4cd44 92f4cd44 92f4cd3c a3d70a00 00014de2 b767a044 93800044 93800044 93800044 93800040 a0000000 00014de2 bdd04044 94400044 94400044 93db3344 94170a3f a6666600 00014de2 c8ccc044 93ddc344 93ddc344 93ddc344 99999 A00 00014de2 CE4B044 930044 931F44 9473D7144 93CD444 93ECC4001 e8e14800d01fc044 93eb3344 93eb3344 93b00044 93b00040 c0000000

数据格式是固定的(我们知道它存储int/float等的位置)

问题是如何读取并存储在单个变量中
例如,此处的前4个字节指定返回的符号数(1)

NSData的方法
func getBytes(buffer:UnsafeMutablePointer,range:NSRange)
应该对您有所帮助。您可以通过指定范围来获取结构中的每一项内容

因此,您可以:

var length: Int = 0
myData.getBytes(&length, range: NSMakeRange(0, 4))

依此类推,对于每种类型,您需要的范围是

NSMutableString*stringHexForm=[NSMutableString];
NSMutableString *stringHexForm = [NSMutableString string];

for(int i = startLocation ; i < (startLocation + nCharsToReadIn) ; i++)
{
    unsigned char byte;

    [dataIn getBytes : &byte range : NSMakeRange(i, 1)];

    NSString *tempStr=[NSString stringWithFormat:@"%02x",byte];

    [stringHexForm appendString:[NSString stringWithFormat:@"%@",tempStr]];
}

unsigned result = 0;    

NSScanner *scanner = [NSScanner  stringHexForm];

[scanner scanHexInt:&result];

return result;
for(int i=startLocation;i<(startLocation+nCharsToReadIn);i++) { 无符号字符字节; [dataIn-getBytes:&字节范围:nsMakerRange(i,1)]; NSString*tempStr=[NSString stringWithFormat:@“%02x”,字节]; [stringHexForm appendString:[NSString stringWithFormat:@“%@”,tempStr]]; } 无符号结果=0; NSScanner*scanner=[NSScanner stringHexForm]; [扫描仪扫描点:&结果]; 返回结果;
如果不知道规范,就无法回答这个问题。你有吗?基本上,我知道前4个字节是整数,比我短2个字节,然后是4个字节的字符串等等…这有帮助吗?int/floats/etc的endianness是什么?数据来自Ameritrade API。规范不是很详细。因此我不得不对其进行反向工程。基本上从原始二进制数据中读取单个整数、短字符、浮点数和字符串。例如,要读取int,I haveNSMutableString*stringHexForm=[NSMutableString];For(int I=startLocation;I<(startLocation+nCharsToradin);I++{unsigned char byte;[dataIn getBytes:&byte range:NSMakeRange(i,1)];NSString*tempStr=[NSString stringWithFormat:@“%02x”,byte];[stringHexForm appendString:[NSString stringWithFormat:@“%@”,tempStr];}无符号结果=0;NSScanner*scanner=[NSScanner stringHexForm];[scanner scanHexInt:&result];返回结果;我读取了前4个字节[0]='\0'、[1]='\0'、[2]='\0'、[3]='\x01'在字节数组中。但是如何将这4个字节转换为整数1。我尝试了NSScanner scanHexInt..没有运气