将字节命令发送到Star Micronics SM-S220I打印机

时间:2013-12-11 20:16:13

标签: ios objective-c printing hex byte

我正试图了解这是如何运作的。我想更改故障单中特定单词的字体大小。

在手册中,它表示使用以下命令更改字符大小:

ASCI: GS ! n
HEX: 1D 21 n

其中n代表高度和宽度扩展。位0到2设置字符宽度。位4到6设置字符高度。

所以我尝试了这些不同的代码变体:

[commands appendBytes:"\x1d\x21\x00"
               length:sizeof("\x1d\x21\x00") - 1];   
[commands appendData:[@"ABCD1\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x02"
               length:sizeof("\x1d\x21\x02") - 1]; 
[commands appendData:[@"ABCD2\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x04"
               length:sizeof("\x1d\x21\x04") - 1]; 
[commands appendData:[@"ABCD3\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x06"
               length:sizeof("\x1d\x21\x06") - 1]; 
[commands appendData:[@"ABCD4\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x08"
               length:sizeof("\x1d\x21\x08") - 1];
[commands appendData:[@"ABCD5\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x10"
               length:sizeof("\x1d\x21\x10") - 1];
[commands appendData:[@"ABCD6\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x12"
               length:sizeof("\x1d\x21\x12") - 1]; 
[commands appendData:[@"ABCD7\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x14"
               length:sizeof("\x1d\x21\x14") - 1]; 
[commands appendData:[@"ABCD8\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x16"
               length:sizeof("\x1d\x21\x16") - 1]; 
[commands appendData:[@"ABCD9\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x18"
               length:sizeof("\x1d\x21\x18") - 1]; 
[commands appendData:[@"ABCD10\n" dataUsingEncoding:NSASCIIStringEncoding]];

[commands appendBytes:"\x1d\x21\x19"
               length:sizeof("\x1d\x21\x19") - 1]; 
[commands appendData:[@"ABCD11\n" dataUsingEncoding:NSASCIIStringEncoding]];

这给了我这个结果:

enter image description here

至少对我来说,这是完全出乎意料的。任何人都可以帮我理解这是如何工作的? 我想要的最终输出是获得ABCD9的高度但是具有成比例的宽度。

谢谢

1 个答案:

答案 0 :(得分:2)

我不知道那台打印机,但从你的示例输出看来,0-2位似乎是定义的 高度,和4-6位角色的宽度(只是相反的方式) 你描述过)。所以n的位是

0www0hhh

字符串“ABCD9”打印有n = \x16 = 00010110,对应 to height = 6(二进制110)和width = 1(二进制001)。 要获得打印宽度=高度= 6的字符串,您需要

n = 01100110 = 0x66

因此

[commands appendBytes:"\x1d\x21\x66" length:3];