我正在将 NSString a=@"0x401A" 转换为 int16_t?
I am converting NSString a=@"0x401A" into int16_t?
为什么当我尝试转换时它会将十六进制值转换为整数?
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:final1];
[scanner scanHexInt:&outVal];
NSLog(@"%u",outVal);
我尝试做的另一种方法是将它转换为正常的 整数 它给了我 0 值。
我只想要相同的字符:
int16_t a=0x401A;
我是从用户那里得到这个号码的,所以我无法自己定义它。我想删除引号和数据类型 int16_t 以便我可以执行命令。
我自己得到了解决方案
首先是将数据转换为字节的函数
- (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 设备。谢谢和干杯
为什么当我尝试转换时它会将十六进制值转换为整数?
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:final1];
[scanner scanHexInt:&outVal];
NSLog(@"%u",outVal);
我尝试做的另一种方法是将它转换为正常的 整数 它给了我 0 值。 我只想要相同的字符:
int16_t a=0x401A;
我是从用户那里得到这个号码的,所以我无法自己定义它。我想删除引号和数据类型 int16_t 以便我可以执行命令。
我自己得到了解决方案
首先是将数据转换为字节的函数
- (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 设备。谢谢和干杯