objective-c NSString to 0x%04x format


NSString *testValue = @"3141";

我想转换为"3141"对于0x0c45,使用十六进制格式(0x%04x)。这样的:

printf("0x%04x", testValue);

打印出来的值是:

0x0c45

但是我不知道如何保存它,我该怎么做呢?

====================================================

NSString *testValue = @"3141";
NSUInteger unsignedValue = (NSUInteger)testValue.integerValue;
NSString *formatted = [NSString stringWithFormat:@"0x%04X", unsignedValue];

这个转换的结果似乎是不正确的。结果为0x0000。让我粘贴源代码如下:

UInt16 myValue = 3141;
printf("0x%04x", myValue);

打印结果为0x0c45。但是我需要的不是打印,而是保存值0x0c45。

如果您查看printf期望的参数,有一个printf理解的格式说明符表,以及printf期望对应于这些格式说明符的输入。具体来说,x/X规范符:

转换无符号整数转换成十六进制表示hhhh

printf试图格式化testValue时,它期望某种类型的无符号整数(unsigned int,unsigned long等),而您传递的testValueNSString *(指向NSString指针)。指针值本身被解释为无符号整数,并由printf打印出来。

为了让printf打印您实际期望的值,您首先需要获得字符串的整数值(通过integerValue或其他方法),然后将传递给printf。例如:

NSString *testValue = @"3141";
NSUInteger unsignedValue = (NSUInteger)testValue.integerValue;
printf("0x%04X", unsignedValue);

(请注意,在生产环境中,您可能希望使用比integerValue更容错的东西,并且您需要了解testValue可能需要多大的域,unsignedValue的存储大小等)


更新:如果您想以这种方式获得格式化值的结果,而不仅仅是打印它,您可以使用+[NSString stringWithFormat:]之类的东西来获取字符串值。该方法接受与printf相同的说明符,因此您可以以相同的方式使用它:

NSString *testValue = @"3141";
NSUInteger unsignedValue = (NSUInteger)testValue.integerValue;
NSString *formatted = [NSString stringWithFormat:@"0x%04X", unsignedValue];
// Do anything you want with `formatted`.

相关内容

  • 没有找到相关文章

最新更新