2013-03-07 59 views
-1

我試圖向一個藍牙打印機發送一個十六進制命令。其中一個字符決定了我可以傳遞的數據的大小。該字符串是:由於輸入字節不屬於輸入代碼集而導致Objective-c輸入轉換停止UTF-8

@「\ X1D \ X28 \ X6B \ XFF \ X00 \ X31 \ X50 \ X30 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X20 \ X66 \ X61 \ X72 \ X74 \ X20 \ X70 \ x6f \ x6f \ X70 \ X79 \ X2E \ X2E \ X2E \ X2E」

我得到的稱號錯誤當我這樣做。原因是我傳遞了ff(第一行 - 16個字符),這是超出UTF-8的代碼集。如果我將它設置爲代碼集中的7f,則一切正常。

我試過幾種不同的東西,但我無法解決這個問題。

+3

爲什麼不創建一個'NSData'對象而不是'NSString'?將字節打包爲數據會更好。 – rmaddy 2013-03-07 00:25:18

+0

那麼你想要發送一個非UTF-8字符到只接受UTF-8的接口的問題呢? – danh 2013-03-07 00:27:52

回答

1

你的代碼更改爲類似以下內容:

uint8_t bytes[] = { 0x1d, 0x28, 0x6b, 0xff, 0x00, 0x31, 0x50, 0x30, 0x66, ... }; 
NSData *data = [[NSData alloc] initWithBytes:bytes length:sizeof(bytes)]; 

現在你可以使用NSData發送十六進制命令。

+0

這工作!謝謝! – 2013-03-07 12:27:19