2016-11-15 10 views
0

왜 변환하려고 할 때 16 진수 값을 정수로 변환합니까?NSString을 int16_t에 @ "0x401A"로 변환합니까?

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

내가하려고하는 또 다른 방법은 나에게 0 가치를 제공 정상 정수로 변환합니다. 난 그냥 같은 문자를 원하는 : 나는 사용자로부터이 번호를 얻고

int16_t a=0x401A; 

그래서 그것을 자신을 정의하는 컨트롤을 해달라고합니다. 인용문과 데이터 형식을 제거하고 싶습니다. int16_t 그래서 명령을 실행할 수 있습니다.

+0

NSLog에서 16 진수 형식 (@ "% X")을 사용하는 경우 올바른 값을 볼 수 있습니까? –

+0

네, 올바른 값을 볼 수 있지만 BLE 장치에 명령을 전달하려면 정수로 필요합니다. –

+0

요점을 놓치고 있습니다. 정수는 올바른 숫자 값을가집니다. 16 진수인지 10 진수인지는'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 장치에 문자열을 보낼 수 있습니다. 감사와 건배