将命令/ByteArray 转义为可读文本 C#

Escape commands / ByteArray to Readable Text C#

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

click on the link to view the image

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

我们将不胜感激。

Link 到文件 Click Here To Download The File

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

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

解析的字符被添加到 StringBuilder object。

► 请注意,这仅处理 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();