我有一个像这样初始化的词典......
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
其中keys
是字母表中的NSArray
和其他字符,而values
是NSArray
的{{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,实际上没有得到这个值。这可能就是我感到困惑的原因。
答案 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”但不想要字符串是矛盾的。