转义命令/字节数组到可读文本 C#



我使用 C# 开发了一个 POS 应用程序,用于收据打印,我正在使用 NuGet 的 PrinterUtility 库,它将字符串转换为 ByteArray,保存并将其发送到收据打印机进行打印。 由于我没有收据打印机,如何将生成的文件转换为可读文本?我使用记事本++打开了结果文件,内容如附图所示

点击链接查看图片

我想知道这个 ByteArray 结果是否可以呈现为文本并显示在 RichTextBox 中,或者是否有任何方法可以创建可以显示结果的虚拟收据打印机?

您的帮助将不胜感激。

链接到文件 点击这里下载文件

试试这个简单的解析器。
它检测SOH(标题开始(和GS(组分隔符(转义代码,并忽略/跳过NULESC代码及其连接的标识符(如果有(。
当读取所有字节或找到ETX(文本结尾(代码时,分析终止。

这是一个非常简单的嵌套while循环,因此您可以轻松调整它以处理特殊情况

解析的字符将添加到 StringBuilder 对象中。

► 请注意,这仅处理 ASCII 字符。对于不使用 ASCII 字符的语言,您需要构建一个字节数组(而不是使用 StringBuilder 的字符数组(,然后使用Encoding.[Some Encoding].GetString([Parsed Byte Array])将字节数组解码为 .Net 字符串格式。

在 RichTextBox 中使用等宽字体(Consolas、Courier New 等(。

var bytes = [Your Byte Array];
var charBuffer = new StringBuilder(bytes.Length);
int nul = 0x00;   // NULL char
int soh = 0x01;   // Start of Heading
int etx = 0x03;   // End of Text
int esc = 0x1B;   // Escape
int gs  = 0x1D;   // Group Separator
int pos = 0;
while (pos < bytes.Length) {
byte byteValue = bytes[pos];
if (byteValue == soh || byteValue == gs || byteValue == nul) {
pos += byteValue == gs ? 3 : 1;
if (pos == etx) break;
while (bytes[pos] != gs && bytes[pos] != esc) {
charBuffer.Append((char)bytes[pos]);
pos += 1;
}
}
pos += 1;
}
richTextBox1.Text = charBuffer.ToString();

最新更新