-1

我需要向佐藤条码打印机发送一系列打印机命令。例如:

<ESC>A
<ESC>H0120
<ESC>V0060
<ESC>$B,180,180,0
<ESC>$=Information
...

我有一个到打印机的开放 tcp/ip 连接,只是想写一个 NSData 对象,例如:

[connection write:data error:error];

其中 data 是一个 NSData 对象。我意识到我可以使用带有 \x1B 的二进制值将转义插入到字符串中。例如:

NSString *printString=[[NSString alloc]initWithString:@"\x1BA\X1BH0120\X1BV0060\X1B$B,180,180,0/X1B$=Information"];  

我遇到的问题是我不知道如何将我的字符串转换为 NSData 进行写入。

我很感激任何建议。

4

2 回答 2

2

你可以简单地做:

NSData *data = [printString dataUsingEncoding:NSUTF8StringEncoding];

选择最适合您需要的编码,除此之外它非常简单。

于 2012-05-18T23:29:03.147 回答
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>

于 2012-05-23T00:12:12.807 回答