2016-11-15 28 views
0

为什么当我试图转换它将十六进制值转换为整数?我将NSString a = @“0x401A”转换为int16_t?

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

另一种方式,我试图做的是将其转换为正常整数它给了我值。 我只是想相同的字符:

int16_t a=0x401A; 

我正在从用户这个数字,所以不要有控制来定义它自己。我想删除引用和数据类型int16_t所以我可以执行命令。

+0

如果在NSLog中使用十六进制格式(@“%X”),你会看到正确的值吗? –

+0

是的,我看到正确的值,但我需要这个整数将命令传递给BLE设备 –

+0

你错过了这一点。整数具有正确的数值;不管你看到它是十六进制还是十进制都只是你在'NSLog()'中使用的格式字符串的函数。 –

回答

0

我得到的溶液自己

第一其中数据转换成字节

- (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; 
} 

和通过给予在命令参数,这些参数将被发送到BLE调用该函数的函数

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

通过此代码,任何人都可以将字符串发送到BLE设备。谢谢和欢呼