2013-03-07 32 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