У меня есть словарь, инициализированный примерно так ...
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
, где keys
- это NSArray
алфавита и других символов, а values
- это NSArray
из 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.
EDIT Я не понял, когдаопубликовал это ранее.Вот что мне нужно.
Мне нужно шестнадцатеричное значение этих кодов, потому что они отправляются по внутренней сети компании.Кроме того, значение нажатой клавиши преобразуется из последовательности с прямым порядком байтов (или мало, она прямо сейчас ускользает от меня, какая она есть) в другую, а затем передается по внутренней сети.Я понимаю, что эти значения хранятся в двоичном формате, но мне нужно передать их в шестнадцатеричном виде.
Кроме того, я заявил, что получаю 12 обратно из функции.Я читал 12 от отладчика, фактически не получая значение.Возможно, поэтому я запутался.