Nadir Muhammed Ответов: 1

Как я могу префикс преобразованное значение 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 символа при печати в шестнадцатеричном формате.

1 Ответов

Рейтинг:
2

OriginalGriff

Попробуй:

foreach (var t in bytes)
    {
    sb.AppendFormat("\\x{0:X2}", t);
    }


Nadir Muhammed

Он вернется с отдыха charector '\\xe4 включительно\\xD5-мне не нужно, что charector побег
мне нужно, чтобы вывод выглядел так: "\xE4\xD5"

OriginalGriff

Нет, это не так - он показывает это в коде, потому что обратная косая черта является escape-символом строки C#, и он показывает это в отладчике по той же причине.
Распечатайте его на консоли, и вы поймете, что я имею в виду:
Приставка.WriteLine(str1);

Nadir Muhammed

я передаю его на термопринтер для печати. и нужно иметь только одну Гекса-escape-последовательность в последней, чтобы определить конец и начало ... я улучшил вопрос.пожалуйста, проверьте это

OriginalGriff

А вы пробовали?

Nadir Muhammed

да ...но это не работает...это не читабельность имеет значение

Philippe Mori

Я добавляю комментарий, спрашивающий, какое жестко закодированное значение будет работать... Если ОП сможет ответить на этот вопрос, то мы сможем подтвердить, хочет ли он того, о чем просил.

Philippe Mori

Для улучшения читабельности вы можете написать @"\x{0:X2}" вместо. Он выведет ту же строку.

Nadir Muhammed

у меня есть аналогичный вопрос здесь, в msdn

https://social.msdn.microsoft.com/Forums/vstudio/en-US/8798e161-46fe-477c-8927-9dd659b8ea40/escpos-arabic-letters-is-separated?форум=posfordotnet