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您在技术上是正确的。当我问这个问题时,我是个十足的白痴。出于某种原因,我假设我必须以十六进制的形式发送代码,但最终,我们实际上是在发送二进制代码。