我有一个这样初始化的字典...
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
其中keys
是一个包含字母和其他字符的NSArray
,而values
是一个包含这些字符对应的USB十六进制键码的unsigned char
数组。
USB键码是从0x04到0xE7的十六进制值。我正在尝试根据键盘上按下的键来创建这两者之间的映射关系。
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];
}
我期望得到0x0C
,但我却以int类型得到了12(想想也是有道理的)。我需要保留十六进制值,而不需要字符串值。我需要直接转换成十六进制值或更好的存储方式。
uint8
只是一个typedef unsigned char。编辑:之前我表述不够清晰。这是我所需要的:
这些代码的十六进制值需要被发送到公司内部网络上。此外,按下的键值正在从大端序(或小端序,我现在逃避了)转换为另一种格式,然后被传输到内部网络上。我知道这些值是以二进制形式存储的,但我需要以十六进制形式传输它们。
此外,我之前说我从函数得到了12。我是从调试器中读取的12,而不是实际获取的值。这可能是我感到困惑的原因。
if(retval == 0x0c) NSLog(@"They're the same"); else NSLog(@"They're not the same");
通过USB串行管道传递的位在十进制12或十六进制C时将保持不变:...00001100 - Stephen Furlani