Как преобразовать json в шестнадцатеричное в c# - PullRequest
0 голосов
/ 12 июля 2020

У меня есть строка json, как в примере ниже

{"SaleToPOIRequest":{"MessageHeader":{"ProtocolVersion":"2.0","MessageClass":"Service","MessageCategory":"Login","MessageType":"Request","ServiceID":"498","SaleID":"SaleTermA","POIID":"POITerm1"},"LogoutRequest":{}}}

Я хочу преобразовать запрос json в шестнадцатеричный. Я пробовал пример в этой ссылке , но я не могу получить точное преобразование из-за значений {,:,",}.

На самом деле я могу получить шестнадцатеричный возврат, но когда я переконвертируюсь в строку, я получил возврат, как показано ниже

{"SaleToPOIReque§7B#§²$ÖW76vTVder":{"ProtocolV¦W'6öâ#¢#"ã"Â$ÚessageClass":"Se§'f6R"Â$ÖW76vT:ategory":"Login"¢Â$ÖW76vUGR#¢*Request","Servic¤B#¢#C"Â%6ÆZID":"SaleTermA",¢%ôB#¢%ôFW&Ú1"},"LogoutReque§7B#§·×

это бесполезно для меня

Есть ли способ преобразовать это?

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Скорее всего вам следует использовать Encoding.Unicode для преобразования строки в массив байтов: вполне возможно, что некоторые символы не могут быть представлены символами ASCII.

Encoding.Unicode (UTF-16LE) всегда использует 2 байтов, поэтому это предсказуемо: последовательность из 4 символов в шестнадцатеричной строке всегда будет представлять UFT-16 CodePoint. Независимо от того, какие символы содержит входная строка.

Преобразовать строку в HEX:

string input = "Yourstring \"Ваша строка\"{あなたのひも},آپ کی تار";;
string hex = string.Concat(Encoding.Unicode.GetBytes(input).Select(b => b.ToString("X2")));

Преобразовать обратно в строку:

var bytes = new List<byte>();
for (int i = 0; i < hex.Length; i += 2) {
    bytes.Add(byte.Parse(hex.Substring(i, 2), NumberStyles.HexNumber));
}
string original = Encoding.Unicode.GetString(bytes.ToArray());
1 голос
/ 12 июля 2020
• 1000 здесь: Преобразовать строку в шестнадцатеричную в C#

Затем для обратного преобразования вы можете использовать этот ответ: { ссылка }

Для вас это будет выглядеть примерно так:

class Program
{
    static void Main(string[] args)
    {
        var input = "{\"SaleToPOIRequest\":{\"MessageHeader\":{\"ProtocolVersion\":\"2.0\",\"MessageClass\":\"Service\",\"MessageCategory\":\"Login\",\"MessageType\":\"Request\",\"ServiceID\":\"498\",\"SaleID\":\"SaleTermA\",\"POIID\":\"POITerm1\"},\"LogoutRequest\":{}}}";
        
        var hex = string.Join("",
            input.Select(c => String.Format("{0:X2}", Convert.ToInt32(c))));

        var output = Encoding.ASCII.GetString(FromHex(hex));

        Console.WriteLine($"input: {input}");
        Console.WriteLine($"hex: {hex}");
        Console.WriteLine($"output: {output}");

        Console.ReadKey();
    }

    public static byte[] FromHex(string hex)
    {
        byte[] raw = new byte[hex.Length / 2];
        for (int i = 0; i < raw.Length; i++)
        {
            raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
        }
        return raw;
    }
}

Посмотрите здесь в действии на скрипке:

https://dotnetfiddle.net/axUC5n

Надежда это помогает и удачи в вашем проекте

...