【发布时间】:2017-05-22 06:08:28
【问题描述】:
我不知道如何将我的 NSString 添加到 NSMutableData 结构中
这是我想要实现的,下面是硬编码并且可以工作,你可以看到数字字符串是我想要用我拥有的辅助函数中的动态数据替换的。
NSMutableData *commands = [NSMutableData data];
[commands appendBytes:"\x1b\x62\x06\x02\x02\x20" "09258384394951\x1e\r\n" length:sizeof("\x1b\x62\x06\x02\x02\x20" "09258384394951\x1e\r\n") - 1];
我尝试构建一个 NSString 来完全模仿上述内容,如下所示
NSString *trNo = [NSString stringWithFormat:@"\"\x1b\x62\x06\x02\x02\x20\" \"%@\x1e\r\n\"", [NWTillHelper getCurrentOrderNumber]];
但这不能添加到 NSMutableData 构造中,我尝试如下
[commands appendBytes:(__bridge const void * _Nonnull)(trNo) length:sizeof("\x1b\x62\x06\x02\x02\x20" "09258384394951\x1e\r\n") - 1];
如何创建一个 appendBytes 构造,以便将我的 NSString 插入其中并使其成为动态的?
----进一步澄清-----
我正在使用 NSData 结构发送到打印机
例如下面是剪切标签的代码
// Cut the paper
[commands appendBytes:"\x1b\x64\x02" length:sizeof("\x1b\x64\x02") - 1];
这是使文本居中对齐的命令
// Alignment (Center)
[commands appendBytes:"\x1b\x1d\x61\x01" length:sizeof("\x1b\x1d\x61\x01") - 1];
如您所见,这些是普通的十六进制命令,它们可以正常工作
我遇到的问题是打印条形码的命令在所有 HEX 代码的中间包含一个动态字符串,我无法弄清楚如何将 NSString 放入这个 HEX 代码的中间。
这是打印条码的命令,其中条码包含数字 09258384394951,您可以在下面看到这些是硬编码的。此代码工作正常,打印机可以正确打印条形码,但问题是我无法对数字/字符 09258384394951 进行硬编码,我需要将其作为某种变量,这就是我卡住的地方。
[commands appendBytes:"\x1b\x62\x06\x02\x02\x20" "09258384394951\x1e\r\n" length:sizeof("\x1b\x62\x06\x02\x02\x20" "09258384394951\x1e\r\n") - 1];
【问题讨论】:
-
您可以先尝试将字符串转换为字节。 NSData *strByte = [trNo dataUsingEncoding:NSUTF8StringEncoding];
-
不起作用,但打印三重奏,显示以下内容,也许我没有逃跑吧? trNo="b""1-20170522141541
-
尝试转义更多但仍然不起作用 NSString *trNo = [NSString stringWithFormat:@"\"\\x1b\\x62\\x06\\x02\\x02\\x20\\ \" \"%@\\x1e\\r\\n\\\"", [NWTillHelper getCurrentOrderNumber]];
-
@GeneCode:在这种情况下,UTF-8 是一个非常糟糕的解决方案,因为马特总是在他的字符串中插入字节。如果他插入一个大于 127 的字节,他将得到一个多字节序列。
NSISOLatin1StringEncoding应该是更好的选择。 -
NSString *trNo = [NSString stringWithFormat:@"\"\\x1b\\x62\\x06\\x02\\x02\\x20\\\" \"%@\\x1e\ \r\\n\\\"", [NWTillHelper getCurrentOrderNumber]]; NSData *strByte = [trNo dataUsingEncoding:NSISOLatin1StringEncoding];还是不行