0

我正在尝试将数据打印到蓝牙打印机。为此,我需要将十六进制发送到打印机。我已经通过发送诸如之类的命令成功地做到了这一点

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

这些都是静态命令。我现在需要获取一些数据,一个 NSString,将其转换为十六进制,然后将其发送到打印机。我尝试了几种不同的方法,其中大部分来自该站点,但无法使其正常工作。

我知道这不起作用,但我想做以下事情:

for(NSUInteger i = 0; i < [str length]; i++ )
{
    [hexString appendString:[NSString stringWithFormat:@"\x%@",[str characterAtIndex:i]]];
}
    • hexString 是我试图创建和返回的字符串。str 是我试图变成十六进制的字符串。例如,11111111 或 abcdefg。

我尝试了各种各样的事情,但都没有运气。

任何帮助将不胜感激!!!

4

3 回答 3

3

dreamlax is right, you should use NSData. You could do something like this:

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

for using "\" you need to escape one "\" more in your format it should be looking like this "\\x%@" basically \ is a escape character using in many of the languages

e.g if you use

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

字符串用于存储文本。如果要存储任意字节,请NSData改用。特别是,在与外部硬件接口时,我认为通常您希望避免使用,NSString特别是因为字符串总是被假定包含文本,但看起来您的打印机需要二进制数据(您只是十六进制表示)。像NUL字节(\x00\0)这样的东西不能很好地配合使用,NSString但它们确实可以很好地配合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];

(我不知道你的实际代码是做什么的)

要再次获取字节,您可以使用例如:

// 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 回答