versers777 Ответов: 1

Преобразуйте строку в шестнадцатеричную и отправьте на TCP-порт-C#


всем привет

Как я могу отправить этот пакет?
{68}{31}{39}{33}{32}{32}{37}{16}

Что я уже пробовал:

string serialnumber = "193227";
byte[] k = Encoding.Default.GetBytes(serialnumber);
var hexString = BitConverter.ToString(k); //My string converted to hex: {31}{39}{33}{32}{32}{37}

byte start = 0x68;
int middle = hexString;
byte end = 0x16;
byte[] packet = new byte[] { start, middle, end };

ns.Write(packet, 0, packet.Length);


Наконец я хочу отправить: {68}{31}{39}{33}{32}{32}{37}{16}
спасибо за помощь

#realJSOP

Почему бы тебе просто не сделать это?

string serialNumber = "h193227" + char(22);
byte[] packet = Encoding.Default.GetBytes(serialNumber);
ns.Write(packet, 0, packet.Length);

1 Ответов

Рейтинг:
0

OriginalGriff

Это вряд ли будет что - то вроде того, что вы хотите- потому что Метода bitconverter.Метод ToString (Byte []) (System)[^] mocverts массив байтовых значений в строку шестнадцатеричных цифр, разделенных дефисами:

00-01-02-04-08-10-20-40-80
И гораздо, гораздо более вероятно, что вам нужны необработанные шестнадцатеричные значения, которые у вас уже есть внутри байтового массива.
Попробовать это:
private const byte start = 0x68;
private const byte end = 0x16;
private byte[] Enpack(byte[] data)
    {
    int packetLength = 1 + data.Length + 1;
    byte[] packet = new byte[packetLength];
    packet[0] = start;
    packet[packetLength - 1] = end;
    Array.Copy(data, 0, packet, 1, packetLength - 2);
    return packet;
    }

И вы можете заменить кодировку по умолчанию определенным набором: возможно, Ascii или UTF8 в зависимости от назначения.


versers777

спасибо за ответ
я получаю эту ошибку:
Не удается преобразовать значения групповой метод 'нон-делегат типа byte''.

OriginalGriff

Это, вероятно, потому, что вы пытаетесь сохранить результат в байте, а не в массиве байтов...или вызываете его без скобок...