我需要向佐藤条码打印机发送一系列打印机命令。例如:
<ESC>A
<ESC>H0120
<ESC>V0060
<ESC>$B,180,180,0
<ESC>$=Information
...
我有一个打开tcp / ip连接到打印机,只想写一个NSData对象,例如:
[connection write:data error:error];
wheras数据是NSData对象。我意识到我可以使用带有\ x1B的二进制值将转义插入到字符串中。例如:
NSString *printString=[[NSString alloc]initWithString:@"\x1BA\X1BH0120\X1BV0060\X1B$B,180,180,0/X1B$=Information"];
我遇到的问题是我不知道如何将我的字符串转换为NSData进行写入。
我感谢任何建议。
答案 0 :(得分:2)
您可以这样做:
NSData *data = [printString dataUsingEncoding:NSUTF8StringEncoding];
选择最适合您需求的编码,除此之外它非常简单。
答案 1 :(得分:0)
如果有人在将来遇到类似的问题,我会对我的一些调查结果进行更新。我的问题是我需要向佐藤条码打印机发送一系列打印机命令。 Sato使用需要上述语法的专有语言,而我需要发送<ESC>
A和<ESC>
Z等命令。我有一个开放的TCP / IP连接,并继续尝试几种方法发送命令,没有运气。我虽然问题出在我对NSData的翻译中。我很近,但还不够近。问题结果是我从文件转换为NSString ...而不是在我将NSString转换为NSData时。我也试图使用\ x“转义”来发送等效于<ESC>
的二进制文件。我终于决定使用八进制等效。
// load the appropriate file as a string
NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sato.txt"];
NSError *firstError=nil;
NSString *satoData=[[NSString alloc]initWithContentsOfFile:filePath encoding:NSNonLossyASCIIStringEncoding error:&firstError]; // the NSNonLossyASCIIStringEncoding was the key to correcting my problem here.
satoData=[satoData stringByReplacingOccurrencesOfString:@"Description" withString:self.description];
satoData=[satoData stringByReplacingOccurrencesOfString:@"ItemID" withString:self.itemId];
satoData=[satoData stringByReplacingOccurrencesOfString:@"Quantity" withString:self.printQty];
NSDate *now=[NSDate date];
NSString *formattedDate=[NSDateFormatter localizedStringFromDate:now dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterNoStyle];
satoData=[satoData stringByReplacingOccurrencesOfString:@"Date" withString:formattedDate];
NSData *data=[satoData dataUsingEncoding:NSUTF8StringEncoding];
[connection write:data error:error];
以下是sato.txt文件
的部分内容示例\033A\033#E5\033Z
\033A\033H0120\033V0060\033$B,180,180,0\033$=ItemID
\ 033是<ESC>