我正在将 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 设备。谢谢和干杯