J'ai un dictionnaire initialisé comme si ...Objective-C Conversion d'un nombre entier d'une valeur hexadécimale
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
où keys
est un NSArray
de l'alphabet et d'autres caractères et values
est un NSArray
de unsigned char
s, qui sont les codes clés hexadécimaux USB pour ces caractères.
Les codes de clé USB sont des valeurs hexadécimales comprises entre 0x04 et 0xE7. J'essaye de créer une carte entre ces deux selon quelle clef est pressée sur le clavier.
Le tableau values
est créé comme si ...
NSArray *values = [NSArray arrayWithObjects:
[NSNumber numberWithUnsignedChar:0x04]/*A*/,
[NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/];
Donc, idéalement quand je lance ce code ... où character == @"I"
- (uint8) getUSBCode:(NSString *)character
{
NSNumber *val = [keyDictionary objectForKey:character];
return (uint8)[val unsignedCharValue];
}
j'attendre de revenir 0x0C
, mais Je récupère 12 comme un int (qui après y avoir pensé, a un sens). J'ai besoin de la valeur hexadécimale conservée. Je n'ai pas besoin d'une valeur de chaîne. J'ai besoin d'une conversion directe à la valeur hexadécimale ou une meilleure façon de stocker
uint8
est juste un typedef unsigned char.
EDIT Je n'étais pas clair quand j'ai posté cela plus tôt. Voici ce dont j'ai besoin.
J'ai besoin de la valeur hexadécimale de ces codes car ils sont envoyés via le réseau interne de l'entreprise. De plus, la valeur de la touche pressée est en train d'être convertie en big endian (ou peu, elle m'échappe en ce moment) et à l'autre, puis est transmise sur un réseau interne. Je comprends que ces valeurs sont stockées en binaire, mais j'ai besoin de les transmettre en hexadécimal.
En outre, j'ai déclaré que je récupérais 12 de la fonction. Je lisais 12 du débogueur, n'obtenant pas réellement la valeur. C'est peut-être pourquoi je devenais confus.
12 décimales et 0x0C sont le même nombre. Vous pouvez essayer de comparer la valeur de retour avec 0x0C et voir si elles sont identiques.c'est-à-dire 'if (retval == 0x0c) NSLog (@" Ils sont identiques "); sinon NSLog (@ "Ils ne sont pas les mêmes"); 'Les bits transmis par le port série USB seront les mêmes avec le décimal 12 ou hex C: ... 00001100 –
Vous avez tous techniquement raison. J'étais un crétin total quand j'ai demandé cela. Pour une raison quelconque, j'ai supposé que je devais envoyer les codes en hexadécimal, mais à la fin, nous envoyons essentiellement des binaires. – DavidAndroidDev