-1

一連のプリンター コマンドを Sato バーコード プリンターに送信する必要があります。例えば:

<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 バーコード プリンターに送信する必要があることでした。Sato は上記のような構文を必要とする独自の言語を使用していますが、私は<ESC>A や<ESC>Z などのコマンドを送信する必要がありました。私は開いている tcp/ip 接続を持っていて、コマンドを送信するためにいくつかの方法を試し続けましたが、うまくいきませんでした。問題は NSData への翻訳にありました。私は近くにいましたが、十分に近くありませんでした。問題は、ファイルから NSString への変換にあることが判明しました... NSString を NSData に変換していたときではありません。また、\x「エスケープ」を使用してバイナリに相当するものを送信しようとすると問題が発生しました<ESC>。最終的に、8 進数に相当するものを使用することにしました。

    // 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 に答える