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

Dav*_*Dev 14 objective-c nsnumber

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

keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
Run Code Online (Sandbox Code Playgroud)

其中keysNSArray字母和其他字符values的一个NSArray,是unsigned chars的一个,它们是这些字符的USB十六进制密钥代码.

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

这个values数组是这样创建的......

NSArray *values = [NSArray arrayWithObjects: 
                  [NSNumber numberWithUnsignedChar:0x04]/*A*/,
                  [NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/]; 
Run Code Online (Sandbox Code Playgroud)

理想情况下,当我运行此代码时...在哪里 character == @"I"

- (uint8) getUSBCode:(NSString *)character
{
    NSNumber *val = [keyDictionary objectForKey:character];

    return (uint8)[val unsignedCharValue];
}
Run Code Online (Sandbox Code Playgroud)

我希望能够回来0x0C,但是我作为一个int得到12回归(在我想到之后,这是有道理的).我需要保留十六进制值.我不需要字符串值.我需要直接转换为十六进制值或更好的存储方式

uint8 只是一个typedef unsigned char.

编辑 我之前发布时并不清楚.这就是我需要的.

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

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

Jer*_*myP 51

12(在基数10中) 0x0c.

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

NSLog(@"Hex value of char is 0x%02x", (unsigned int) c);
Run Code Online (Sandbox Code Playgroud)

如果要在调试器中以十六进制形式查看它(假设Xcode 3.2.x),请右键单击该变量并选择十六进制作为格式.