2016-11-15 67 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設備。謝謝和歡呼