iPhone SDK:的NSString NSNumber的IEEE-754
-
21-09-2019 - |
题
有人可以帮助我?我有一个NSString
和@"12.34"
我想它使用相同的浮点数,但在单精度32位转换成二进制NSString的浮点格式IEEE-754:像@"\x41\x45\x70\xa4"
(带六字符)或@"AEp¤"
...
我敢肯定它的东西很容易,但几个小时的阅读文档没有找到一个解决方案之后...
谢谢!
解决方案
至于虞姬所提到的,它不是一个任意字节序列编码成一个NSString一个好主意(尽管它可以包含空字节),即编码转换可以(并且可能会)摧毁你的字节序列。如果你想获得一个浮动的原始字节,你可能要考虑将它们存储为一个NSData对象(虽然我建议你想通过你的理由为希望第一本)。要做到这一点:
NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];
其他提示
如果你想获得一个浮动的原始字节,你可以施放它,就像这样:
NSString *str = @"12.34";
float flt = [str floatValue];
unsigned char *bytes = (unsigned char *)&flt;
printf("Bytes: %x %x %x %x\n", bytes[0], bytes[1], bytes[2], bytes[3]);
然而,在这些字节被存储在数组中的顺序取决于在机器上。 (请参见 http://en.wikipedia.org/wiki/Endianness )。例如,在我的英特尔的iMac它打印: “字节:A4 70 45 41”。
要从字节数组使一个新的NSString可以使用initWithBytes:length:encoding:
不隶属于 StackOverflow