iPhone SDK:NSString NSNumber IEEE-754

iPhone SDK:NSString NSNumber IEEE-754,iphone,objective-c,formatting,nsstring,number-formatting,Iphone,Objective C,Formatting,Nsstring,Number Formatting,有人能帮我吗?我有一个带有@“12.34”的NSString,我想将它转换成一个具有相同浮点数但采用单精度32位二进制浮点格式IEEE-754的NSString:like@“\x41\x45\x70\xa4”(带有六个字符)或@“AEp”。。。 我相信这很容易,但在阅读了很多小时的文档后,却没有找到解决方案 谢谢大家! 如果要获取浮点的原始字节,可以强制转换它,如下所示: NSString *str = @"12.34"; float flt = [str floatValue]; unsign

有人能帮我吗?我有一个带有
@“12.34”
NSString
,我想将它转换成一个具有相同浮点数但采用单精度32位二进制浮点格式IEEE-754的NSString:like
@“\x41\x45\x70\xa4”
(带有六个字符)或
@“AEp”
。。。 我相信这很容易,但在阅读了很多小时的文档后,却没有找到解决方案


谢谢大家!

如果要获取浮点的原始字节,可以强制转换它,如下所示:

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]);
但是,这些字节在数组中的存储顺序取决于机器。(见附件)。例如,在我的英特尔iMac上打印:“字节:a4 70 45 41”


要从字节数组生成新的NSString,您可以使用
initWithBytes:length:encoding:

,正如Yuji所提到的,将任意字节序列编码为NSString(尽管它可能包含空字节)不是一个好主意,因为编码转换可能(也可能会)破坏您的字节序列。如果你想访问浮点的原始字节,你可能想考虑将它们存储为NStask对象(尽管我建议你先考虑一下你为什么想要这个)。为此:

NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];

需要明确的是:在这个网站上,你可以找到一个IEEE-754浮点转换器,从十进制浮点到32位和64位十六进制表示:我需要的是一个NSString,它包含传递的NSString中包含的浮点的ASCII表示。”@“12.34”到:“@”AEp·”或“@”\x41\x45\x70\xa4”注意:如果我执行“float fnumber=[myNSString floatValue];“当我进行调试时,我可以在内存浏览器中看到前4个字节是:“a4 70 45 41”。如何提取这些字节?getBytes:maxLength:usedLength:encoding:options:range:remainingRange:?将任意字节序列放入
NSString
中不是一个好主意,因为
NSString
没有保持原来的字节序列,它可能会在内部应用编码更改,这可能会在不更改文本表示的情况下破坏字节序列。我不确定
NSString
是否可以包含
\x00
。我建议改为使用NSData。这不应该是
initWithBytes:&myFloat…
?谢谢你,迈克!我现在必须反转字节序列!有人有主意吗?