2016-09-21 1 views
0

BLEのプロジェクトでは、Q:iOS文字がgbkエンコーディングに変換され、16進数に変換されてからデータに変換されます。

私は、peripheralに を進データを記述する必要がありますが、今、私は中国の文字列を持っている:

NSString *originStr = @"PJ1中国"; 

をしかし、デモがあることである:

Byte b = 0X01; // ER: 4552 PJ1我爱廖马儿:504A31CED2B0AEC1CEC2EDB6F9 
NSData *data = [NSData dataWithBytes:&b length:sizeof(b)]; 
[self.currPeripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse]; 

が今私の問題は私を変換する方法でありますデモの@"PJ1中国"data

+1

'CFStringEncodings'(私は' kCFStringEncodingGBK_95'でしょうか?)をチェックし、 'originStr'を' dataUsingEncoding: 'で' NSData'に直接変換します。 'Byte'を使う必要はありません。 – Larme

+0

@Larme beforあなたの答え私は 'NSString * dataStr = writeStr;を使用します。 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSData * myData = [dataStr dataUsingEncoding:enc]; '私はこれをコンサートに使用し、データは「」ですが、私は' self.currPeripheral writeValue: 'を使用します。 – aircraft

+0

それは動作しませんか? – Larme

答えて

0

おかげLarmeのヒント、と私はdataを取得するには、この機能を使用します。

NSString *dataStr = writeStr; 
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingG‌​‌​B_18030_2000); NSData *myData = [dataStr dataUsingEncoding:enc]; 

そして私はdevelopment boardに情報を書き込むために、以下の使用:

[self.currPeripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicPropertyWrite]; 

注意してください:typeではありません質問のデモ:CBCharacteristicWriteWithResponseですが、タイプはCBCharacteristicPropertyWriteです。 または、エラーが発生します。

Error Domain=CBATTErrorDomain Code=3 "Writing is not permitted." UserInfo={NSLocalizedDescription=Writing is not permitted.}。そして私はまたラルメのヒントに感謝します。

+1

' 'type'パラメータ"ここ:http://stackoverflow.com/questions/39603104/unable-to-send-data-to-characteristic – Larme

関連する問題