如何将 NSString 添加到 NSMutableData?

How do I add an NSString to NSMutableData?

我不知道如何将我的 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];

如您所见,这些都是普通的十六进制命令,它们可以正常工作

我遇到的问题是打印条形码的命令在所有十六进制代码的中间包含一个动态字符串,我无法弄清楚如何将 NSString 放入此十六进制代码的中间。

这是打印条形码的命令,其中条形码包含数字 09258384394951,您可以在下面看到这些是硬编码的。此代码工作正常,打印机正确打印条形码,但问题是我无法对 numbers/characters 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];

试试这个:

[commands appendData:[trNo dataUsingEncoding:NSUTF8StringEncoding]];

你可以从 NSString,

得到 NSData
NSData *dataString = [yourString dataUsingEncoding: NSUTF8StringEncoding];

使用适合您情况的编码。将获得的数据附加到现有的 NSMutableData,

NSMutableData *commands = [data mutableCopy];

分 3 步添加数据:

NSMutableData *commands = [NSMutableData data];
NSData *orderNumber = [@"09258384394951" dataUsingEncoding:NSUTF8StringEncoding];  // example of order number converted to NSData
[commands appendBytes:"\x1b\x62\x06\x02\x02\x20" "" length:sizeof("\x1b\x62\x06\x02\x02\x20" "") - 1];  
[commands appendData:orderNumber];  
[commands appendBytes:"\x1e\r\n" length:sizeof("\x1e\r\n") - 1];