Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将NSString添加到NSMutableData?_Objective C_Nsmutabledata - Fatal编程技术网

Objective c 如何将NSString添加到NSMutableData?

Objective c 如何将NSString添加到NSMutableData?,objective-c,nsmutabledata,Objective C,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\

我不知道如何将我的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];
正如您所看到的,这些是普通的十六进制命令,它们可以正常工作

我的问题是打印条形码的命令包括在所有十六进制代码中间的一个动态字符串,我不知道如何在这个十六进制代码的中间得到一个NString。 这是用于打印条形码的命令,其中条形码包含数字092583843951,如您所见,这些数字在下面硬编码。此代码工作正常,打印机正确打印条形码,但问题是我无法硬编码数字/字符092583843951我需要它成为某种类型的变量,这就是我遇到的问题

[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];    

您可以先尝试将字符串转换为字节。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是一个非常糟糕的解决方案,因为Matt总是在字符串中插入字节。如果他插入大于127的字节,他将得到一个多字节序列。
nsisolatin1stringecoding
应该是一个更好的选择。NSString*trNo=[NSString stringWithFormat:@“\\\x1b\\x62\\x06\\x02\\x02\\x20\\\\\\\\\\\\%\\x1e\\r\\n\\”“,[NWTillHelper getCurrentOrderNumber]];NSData*strByte=[trNo dataUsingEncoding:NSISOLatin1StringEncoding];仍然不工作这会打印实际字符串,我猜打印机需要字节转换的数据?这不是appendBytes所做的吗?哦,你有点想把十六进制字符串打印到nsdata吗?是的,我正在尝试创建一个nsdata字符串,它看起来和我问题中的一样,但它是硬编码的,我只是想让它动态化。你基本上想把“十六进制”代码直接输入nsmutabledata吗?因此,当您在文件上使用类似“hextump”的内容时,它将显示相同的十六进制字符串?我想这样做,[命令appendBytes:“\x1b\x62\x06\x02\x02\x20”“09258384391951\x1e\r\n”长度:sizeof(“\x1b\x62\x06\x02\x02\x20”“092583843951\x1e\r\n”)-1];但是更改变量的092583843951