Как я могу префикс преобразованное значение hex с HEX значение '\Х' в C#
Как я могу префикс преобразованное значение hex с HEX значение '\Х' в C#.Приведенная ниже функция.
private void button1_Click(object sender, EventArgs e) { Open(); string str = "نص"; string str1 = ToHexString(str); textBox1.Text = str1; StringBuilder receipt = new StringBuilder(); receipt.Append("\x1B\x40"); // Initialize Printer receipt.Append("\x1B\x74\x28"); // Select Arabic code page (Page 40,1256) receipt.Append(str1); // The Arabic text to be printed receipt.Append("\x0A"); // Print and line feed receipt.Append("\x1D\x56\x42\x00"); // Select cut mode and cut paper string szString = receipt.ToString(); PrintText(Printer, szString); } public string ToHexString(string str) { var sb = new StringBuilder(); var encoding = Encoding.GetEncoding(1256); var bytes = encoding.GetBytes(str); foreach (var t in bytes) { sb.Append(t.ToString("X2")); } return sb.ToString(); }
выход str1 - 'E4D5', и мне нужно получить его как '\xE4\xD5'
Что я уже пробовал:
Я пытался напечатать арабскую термопечать и, наконец, получил решение преобразовать ее в арабский charector с помощью windows arabic code 1256. Но принтеру нужен escape-кодер '\x', чтобы считывать все значения hexa.
Philippe Mori
В вашем коде и вашем вопросе есть несоответствие... Как представлено, кажется, что вы хотите избежать только содержания str1
но не такие команды, как Инициализация Принтера.
Если вы хотели зашивать str1 выглядит следующим образом, Хотите написать receipt.Append("\xE4\xD5")
или receipt.Append("\\xE4\\xD5")
или receipt.Append(@"\xE4\xD5")
или receipt.Append("E4D5")
?
Сработает ли эта жестко закодированная строка? Какие именно?
Nadir Muhammed
при жестком кодировании это прекрасно работает " квитанция.Функции append("\xe4 включительно\xD5")'
Philippe Mori
Ну, тогда ваша проблема в том, что вы, кажется, не понимаете, что когда вы пишете "\xE4", это означает строку с символьным кодом E4, а не строку @"\xE4". Таким образом, вы задаете неправильный вопрос. OriginalGriff точно ответит на то, что вы спросили, но это было не то, что вы хотели. Если добавление "\xE4\xD5 " работает, то вам нужно отправить значения байтов. Таким образом, даже ToHexString
функция неправильно названа. Вы должны были бы сделать что-то вроде sb.Append((char)t);
Philippe Mori
Кстати, строки в C# находятся в UTF-16. Таким образом, возможно некоторое преобразование из этой кодировки в ту, которая используется для отправки данных на принтер. Мы должны знать, можете ли вы правильно печатать, используя что-либо из вышеперечисленного.
Было бы также полезно показать, как вы печатаете "ABC", и проверить, работает ли это.
Информация по ссылке, которую вы предоставляете (ESC-POS арабские буквы разделены) несколько отличаются от того, что здесь. Было бы лучше предоставить всю необходимую информацию.
Кстати, этот вопрос не имеет особого смысла. Что значит, что буквы разделены? Ожидали бы вы E4D5 без пробела? Этого не может быть, так как это шестнадцатеричный дамп байтов, а байты имеют ширину 2 символа при печати в шестнадцатеричном формате.