2016-11-15 5 views
0

Pourquoi quand j'essaye de convertir il convertit la valeur hexadécimale en nombre entier?Je convertis NSString a = @ "0x401A" en int16_t?

unsigned int outVal; 
NSScanner* scanner = [NSScanner scannerWithString:final1]; 
[scanner scanHexInt:&outVal]; 
NSLog(@"%u",outVal); 

Une autre façon que je suis en train de faire est de le convertir en entier normale il me donne 0 valeur. Je veux juste les mêmes personnages:

int16_t a=0x401A; 

Je reçois ce nombre d'utilisateurs, donc n'avoir le contrôle pour définir moi-même. Je veux supprimer les citations et le type de données int16_t afin que je puisse exécuter la commande.

+0

Si vous utilisez un format hexadécimal (@ "% X") dans "NSLog", voyez-vous la bonne valeur? –

+0

oui je vois la bonne valeur, mais j'ai besoin de cela en entier pour passer la commande à l'appareil BLE –

+0

Vous manquez le point. L'entier a la valeur numérique correcte; si vous le voyez comme hexadécimale ou décimale est seulement une fonction de la chaîne de format que vous utilisez dans 'NSLog()'. –

Répondre

0

J'obtenu la solution moi-même

d'abord la fonction qui convertit les données en octets

- (NSData *)dataWithString:(NSString *)hexstring 
{ 
    NSMutableData* data = [NSMutableData data]; 
    int idx; 
    for (idx = 0; idx+2 <= hexstring.length; idx+=2) { 
     NSRange range = NSMakeRange(idx, 2); 
     NSString* hexStr = [hexstring substringWithRange:range]; 
     NSScanner* scanner = [NSScanner scannerWithString:hexStr]; 
     unsigned int intValue; 
     [scanner scanHexInt:&intValue]; 
     [data appendBytes:&intValue length:1]; 
    } 
    return data; 
} 

et appeler la fonction en donnant les paramètres de la commande qui seront envoyés à BLE

NSData * data = [self dataWithString: @"401A"]; 
[peripheral writeValue:data forCharacteristic:characteristic          
          type:CBCharacteristicWriteWithResponse]; 

Grâce à ce code, n'importe qui peut envoyer une chaîne à l'appareil BLE. Merci et applaudissements