У меня есть словарь, инициализированный так...
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
где keys
является NSArray
алфавита и других символов, а values
является NSArray
of unsigned char
s, которые являются шестыми ключами USB для этих символов.
Коды 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
, но я получаю 12 назад как int (который после того, как я подумал об этом, имеет смысл). Мне нужно сохранить шестнадцатеричное значение. Мне не нужно строковое значение. Мне нужно прямое преобразование в шестнадцатеричное значение или лучший способ хранения
uint8
- это просто typedef unsigned char.
РЕДАКТИРОВАТЬ Я был неясно, когда я разместил это раньше. Вот что мне нужно.
Мне нужно шестнадцатеричное значение этих кодов, потому что они отправляются по внутренней сети компании. Кроме того, значение нажатой клавиши преобразуется из большого эндиана (или немного, оно ускользает от меня прямо сейчас, какое оно есть) к другому, а затем передается по внутренней сети. Я понимаю, что эти значения хранятся в двоичном формате, но мне нужно передать их в шестнадцатеричном формате.
Кроме того, я заявил, что получаю 12 от функции. Я читал 12 из отладчика, а не получал значение. Возможно, поэтому я сбился с толку.