Tengo un diccionario inicializado como tal ...Objective-C en la conversión de un entero con un valor hexadecimal
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
donde keys
es un NSArray
del alfabeto y otros personajes y values
es un NSArray
de unsigned char
s, que son los códigos llaves hexagonales USB para esos caracteres.
Los códigos de la llave USB son valores hexadecimales que van desde 0x04 a 0xE7. Intento crear un mapa entre estos dos dependiendo de qué tecla se presione en el teclado.
La matriz values
se crea como tal ...
NSArray *values = [NSArray arrayWithObjects:
[NSNumber numberWithUnsignedChar:0x04]/*A*/,
[NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/];
Así que lo ideal cuando corro el código ... donde character == @"I"
- (uint8) getUSBCode:(NSString *)character
{
NSNumber *val = [keyDictionary objectForKey:character];
return (uint8)[val unsignedCharValue];
}
que se puede esperar para volver 0x0C
, pero Obtendré 12 de vuelta como int (que después de pensarlo, tiene sentido). Necesito el valor hexadecimal preservado. NO necesito un valor de cadena. Necesito una conversión directa al valor hexadecimal o una forma mejor de almacenar
uint8
es simplemente un typedef char sin signo.
EDIT No estaba claro cuando publiqué esto antes. Esto es lo que necesito.
Necesito el valor hexadecimal de estos códigos porque se envían a través de la red interna de la compañía. Además, el valor de la tecla presionada se está convirtiendo de big endian (o poco, me está escapando, cuál es) a la otra, y luego se transmite a través de una red interna. Entiendo que estos valores se almacenan en binario, pero necesito transmitirlos en hexadecimal.
También, dije que estaba obteniendo 12 de vuelta de la función. Estaba leyendo 12 del depurador, no obteniendo realmente el valor. Esa podría ser la razón por la que me estaba confundiendo.
12 decimal y 0x0C son el mismo número. Podría intentar comparar el valor de retorno con 0x0C y ver si son iguales.es decir 'if (retval == 0x0c) NSLog (@" They are the same "); de lo contrario, NSLog (@ "No son lo mismo"); 'Los bits que pasan por la tubería serial USB serán los mismos con decimal 12 o hexadecimal C: ... 00001100 –
Todo está técnicamente correcto. Estaba siendo un idiota total cuando le pregunté esto. Por alguna razón, asumí que tenía que enviar los códigos como hex, pero al final, básicamente estamos enviando binarios. – DavidAndroidDev