2013-04-01 8 views
1

Je pose cette question principalement parce que j'ai cherché sur ce site des solutions possibles et aucune n'a fonctionné comme je l'espérais.Convertir une chaîne hexadécimale en un caractère non signé []

Je voudrais effectuer la conversion de cette chaîne hexadécimale en un caractère non signé [].

NSString *text = @"0043600001"; dans unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01}

J'ai besoin de la représentation hexadécimale 0x ## parce que je vous envoie un hôte qui accepte les messages en hexadecimal format seulement. Ai-je raison de dire, moi aussi j'ai besoin de NSScanner pour effectuer ces étapes pour séparer 2 caractères? Vraiment perdu et confus sur ce que je dois faire.

Ce sont les étapes pour se connecter et envoyer le message hexadécimal à l'hôte:

unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01} 
NSData *data = [NSData dataWithBytes:dataSmall length:sizeof(dataSmall)]; 

PS, je ne sais pas la partie NSData, mais il semble fonctionner lorsque j'utilise cette ligne NSData à envoyer messages hexadécimaux à l'hôte. Donc je le laisse tel quel. Actuellement, dataSmall[] est codé en dur et j'aimerais savoir comment le gérer dynamiquement. Apprécierait toutes les aides ici.

EDIT 1 Ah, j'ai manqué une information importante. Les données hexadécimales sont un message ISO8583 lui-même. Pouvez-vous expliquer d'où vient la chaîne hexagonale?

+0

Il semble très étrange que vous ayez un tas de données hexadécimales en guise de chaîne. – rmaddy

+0

C'est un peu déroutant pour moi au début, alors je suis désolé si je ne vous donne pas les réponses que vous cherchez. Pour l'instant, ce serait à partir de 'TextField'. Mais je dois encore faire quelque chose à ce sujet, comme la conversion de chaînes ASCII en données hexadécimales. Et oui, ce serait bizarre de convertir des chaînes hexadécimales en données hexadécimales. –

+0

Si vous voulez convertir du texte en 'NSData' que vous pouvez envoyer à un serveur, il suffit d'obtenir le' NSData' comme ceci: 'NSData * textData = [someTextField.text dataUsingEncoding: NSUTF8StringEncoding];'. C'est tout. Vous avez maintenant les octets du texte codés en UTF-8 et prêts à être envoyés au serveur. Le serveur peut maintenant utiliser ces données pour recréer la chaîne UTF-8. Il n'y a pas besoin de toute cette conversion hexadécimale. – rmaddy

Répondre

0
NSScanner *scan = [[NSScanner alloc] initWithString:@"1F61E"]; 
unsigned int val; 
[scan scanHexInt:&val]; 
char cc[4]; 
cc[3] = (val >> 0) & 0xFF; 
cc[2] = (val >> 8) & 0xFF; 
cc[1] = (val >> 16) & 0xFF; 
cc[0] = (val >> 24) & 0xFF; 
NSString *s = [[NSString alloc] 
       initWithBytes:cc 
       length:4 
       encoding:NSUTF32StringEncoding]; 
NSLog(@"[%@]", s); 
+0

Merci pour l'exemple de code, va le tester et revenir à vous sur ce commentaire. Mais puis-je demander, quel est ce '1F61E'? et ces val comparaison de 0, 8, 16, 24. Que sont-ils supposés faire? –

+0

1f61E est une valeur hexadécimale et (0,8,16,24) est un décalage binaire, vous avez peut-être entendu parler du décalage binaire. –

+0

Non, je ne l'ai pas. Merci, je vais lire à ce sujet. –

Questions connexes