Objective-C将整数转换为十六进制值

时间:2011-03-29 14:10:18

标签: objective-c nsnumber

我有一个像这样初始化的词典......

keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];

其中keys是字母表中的NSArray和其他字符,而valuesNSArray的{​​{1}},其中包含USB十六进制密钥代码那些人物。

USB密钥代码是十六进制值,范围从0x04到0xE7。我正在尝试根据键盘上按下的键创建这两者之间的地图。

unsigned char数组就是这样创建的......

values

理想情况下,当我运行此代码时...... 其中NSArray *values = [NSArray arrayWithObjects: [NSNumber numberWithUnsignedChar:0x04]/*A*/, [NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/];

character == @"I"

我希望能回来- (uint8) getUSBCode:(NSString *)character { NSNumber *val = [keyDictionary objectForKey:character]; return (uint8)[val unsignedCharValue]; } ,但是我作为一个int得到了12个回归(在我想到之后,这是有意义的)。我需要保留十六进制值。我不需要字符串值。我需要直接转换为十六进制值或更好的存储方式

0x0C只是一个typedef unsigned char。

编辑我之前发布此内容并不清楚。这就是我需要的。

我需要这些代码的十六进制值,因为它们是通过内部公司网络发送的。此外,按下的键的值正在从big endian(或者很少,它正在逃避我现在的哪一个)转换到另一个,然后通过内部网络传输。我知道这些值存储在二进制文件中,但我需要以十六进制格式传输它们。

另外,我说我从这个功能回来了12。我从调试器中读到12,实际上没有得到这个值。这可能就是我感到困惑的原因。

3 个答案:

答案 0 :(得分:49)

12(在基数10中) 0x0c。

如果要以十六进制打印出来,请使用%x格式说明符,例如

NSLog(@"Hex value of char is 0x%02x", (unsigned int) c);

如果你想在调试器中看到十六进制(假设是Xcode 3.2.x),请右键单击变量并选择十六进制作为格式。

答案 1 :(得分:0)

你知道int是以二进制形式存储的(即'hex'值始终是永远保留的),所以我将你的问题解释为与打印到屏幕有关。
您应该可以使用format specifier - 例如%0x

答案 2 :(得分:0)

从-getUSBCode:方法返回的值不是两位十进制数字,而是一个八位字节。 “12”“0x0C”都是表示该字节值的字符串,所以说你想要“0x0C”但不想要字符串是矛盾的。