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
等),而您传递的testValue
是NSString *
(指向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`.