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

Objective-C将整数转换为十六进制值,objective-c,nsnumber,Objective C,Nsnumber,我有一本这样初始化的字典 keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain]; NSArray *values = [NSArray arrayWithObjects: [NSNumber numberWithUnsignedChar:0x04]/*A*/, [NSNumber numberWithUnsigne

我有一本这样初始化的字典

keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
NSArray *values = [NSArray arrayWithObjects: 
                  [NSNumber numberWithUnsignedChar:0x04]/*A*/,
                  [NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/]; 
其中keys是字母表和其他字符的NSArray,value是无符号字符的NSArray,这些字符是这些字符的USB十六进制键码

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

值数组是这样创建的

keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
NSArray *values = [NSArray arrayWithObjects: 
                  [NSNumber numberWithUnsignedChar:0x04]/*A*/,
                  [NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/]; 
因此,理想情况下,当我运行此代码时。。。 其中character==@I

我希望得到0x0C,但我得到的是12,作为一个int,经过我的思考,这是有意义的。我需要保留十六进制值。我不需要字符串值。我需要一个直接转换到十六进制值或更好的方式来存储

uint8只是一个typedef无符号字符

编辑我不清楚,当我张贴这个早些时候。这是我需要的

我需要这些代码的十六进制值,因为它们是通过公司内部网络发送的。此外,按下的键的值正在从大端或小端转换,我现在不知道它是哪一个到另一个,然后通过内部网络传输。我知道这些值是以二进制存储的,但我需要以十六进制传输它们


另外,我说我从函数中得到12。我从调试器中读取12,而不是实际获取值。这可能就是我感到困惑的原因。

您知道int是以二进制形式存储的,即“hex”值总是并且永远不会被保留,因此我将您的问题解释为与屏幕打印有关。
您应该能够使用a来表示它,例如%0x。

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

12在基数10中是0x0C

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

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

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

正确。我想我的问题不是很清楚。现在要编辑它。12十进制和0x0C是相同的数字。您可以尝试将返回值与0x0C进行比较,看看它们是否相同。i、 e.ifretval==0x0cNSLog@They“你是一样的;其他的NSLog@They“你不一样;通过USB串行管道传递的位将与十进制12或十六进制C相同:…000011000您在技术上是正确的。当我问这个问题时,我是个十足的白痴。出于某种原因,我假设我必须以十六进制的形式发送代码,但最终,我们实际上是在发送二进制代码。