0

Bluetoothプリンターにデータを印刷しようとしています。これを行うには、16 進数をプリンターに送信する必要があります。次のようなコマンドを送信することで、これを正常に実行しています

@"\x1b\x7b\x01" @"\x1b\x7b\x00"

これらはすべて静的コマンドです。ここで、NSString というデータを取得し、それを 16 進数に変換してから、プリンターに送信する必要があります。私はいくつかの異なる方法を試しましたが、そのほとんどはこのサイトからのものでしたが、うまくいきません。

これがうまくいかないことはわかっていますが、次のことをしたいと思います。

for(NSUInteger i = 0; i < [str length]; i++ )
{
    [hexString appendString:[NSString stringWithFormat:@"\x%@",[str characterAtIndex:i]]];
}
    • hexString は、作成して返そうとしている文字列です。str は、16 進数に変換しようとしている文字列です。たとえば、11111111 または abcdefg です。

私はさまざまなことを試しましたが、すべて運がありませんでした。

どんな助けでも大歓迎です!!!

4

3 に答える 3

3

dreamlaxは正しいので、を使用する必要がありますNSData。あなたはこのようなことをすることができます:

NSDictionary *hexTable = @{@"0" : @0,
                           @"1" : @1,
                           @"2" : @2,
                           @"3" : @3,
                           @"4" : @4,
                           @"5" : @5,
                           @"6" : @6,
                           @"7" : @7,
                           @"8" : @8,
                           @"9" : @9,
                           @"a" : @10,
                           @"b" : @11,
                           @"c" : @12,
                           @"d" : @13,
                           @"e" : @14,
                           @"f" : @15};

NSMutableData *data = [[NSMutableData alloc] init];
for(NSUInteger i = 0; i < str.length; i+=2 ) {
    NSString *substring1 = [str substringWithRange:NSMakeRange(i, 1)];
    NSString *substring2 = [str substringWithRange:NSMakeRange(i+1, 1)];
    char valueHigh = [hexTable[substring1] charValue];
    char valueLow = [hexTable[substring2] charValue];
    char result = valueHigh*0x10 + valueLow;
    [data appendBytes:&result length:1];
}
于 2013-03-06T23:58:38.110 に答える
2

Strings are for storing text. If you want to store arbitrary bytes use NSData instead. In particular, when interfacing with external hardware, I think in general you want to avoid using NSString especially because strings are always assumed to contain text, but it appears as though your printer is expecting binary data (which you are simply only representing in hexadecimal). Things like NUL bytes (\x00 or \0) do not play nicely with NSString but they do play nicely with NSData.

const char boldOnBytes[] = { 0x1b, 0x7b, 0x01 };
NSData *boldOn = [NSData dataWithBytes:boldOnBytes length:sizeof boldOnBytes];

const char boldOffBytes[] = { 0x1b, 0x7b, 0x00 };
NSData *boldOff = [NSData dataWithBytes:boldOffBytes length:sizeof boldOffBytes];

(I have no idea what your actual codes do)

To get the bytes again, you can use for example:

// assume you have a function called sendFunction which accepts a handle to the
// printer, the bytes to send, and a length of how many bytes to send.
sendFunction(printerHandle, [boldOn bytes], [boldOn length]);
于 2013-03-07T00:12:14.770 に答える
2

「\」を使用するには、フォーマットで「\」をもう 1 つエスケープする必要があります。"\\x%@" 基本的に\は、多くの言語で使用されているエスケープ文字です。

たとえば、使用する場合

NSLog(@"\\"); // output is one backslash
NSLog(@"\\\\"); // output is two backslashes
于 2013-03-07T00:00:56.397 に答える