Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中将json转换为十六进制#_C#_Asp.net_Json_Winforms_Hex - Fatal编程技术网

C# 如何在c中将json转换为十六进制#

C# 如何在c中将json转换为十六进制#,c#,asp.net,json,winforms,hex,C#,Asp.net,Json,Winforms,Hex,我有json字符串,如下例所示 {"SaleToPOIRequest":{"MessageHeader":{"ProtocolVersion":"2.0","MessageClass":"Service","MessageCategory":"Login","MessageType":"Request&quo

我有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#§·×
那对我没用


有什么方法可以转换这个吗?

所以基本上问题不仅是转换为十六进制,而且还要转换回十六进制

这只不过是将两个答案组合在一起,因此:

首先,对于转换,我们使用以下给出的答案:

然后,对于转换回,您可以使用以下答案:

对你来说,它会像这样:

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;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var input=“{\'SaleToPOIRequest\”:{\'MessageHeader\“:{\'ProtocolVersion\”:“2.0\”,“MessageClass\”:“Service\”,“MessageCategory\”:“Login\”,“MessageType\”:“Request\”,“ServiceID\”:“498\”,“SaleID\”:“SaleTermA\”,“POID\”:“POITerm1\”,“LogoutRequest\”:{};
var hex=string.Join(“,
选择(c=>String.Format(“{0:X2}”,Convert.ToInt32(c));
var输出=Encoding.ASCII.GetString(FromHex(hex));
WriteLine($“输入:{input}”);
Console.WriteLine($“hex:{hex}”);
WriteLine($“输出:{output}”);
Console.ReadKey();
}
公共静态字节[]FromHex(字符串十六进制)
{
字节[]原始=新字节[hex.Length/2];
for(int i=0;i
在这里,你可以在小提琴中看到它的动作:


希望这对您的项目有帮助并祝您好运,因此基本上问题不仅仅是转换为十六进制,还包括转换回十六进制

这只不过是将两个答案组合在一起,因此:

首先,对于转换,我们使用以下给出的答案:

然后,对于转换回,您可以使用以下答案:

对你来说,它会像这样:

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;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var input=“{\'SaleToPOIRequest\”:{\'MessageHeader\“:{\'ProtocolVersion\”:“2.0\”,“MessageClass\”:“Service\”,“MessageCategory\”:“Login\”,“MessageType\”:“Request\”,“ServiceID\”:“498\”,“SaleID\”:“SaleTermA\”,“POID\”:“POITerm1\”,“LogoutRequest\”:{};
var hex=string.Join(“,
选择(c=>String.Format(“{0:X2}”,Convert.ToInt32(c));
var输出=Encoding.ASCII.GetString(FromHex(hex));
WriteLine($“输入:{input}”);
Console.WriteLine($“hex:{hex}”);
WriteLine($“输出:{output}”);
Console.ReadKey();
}
公共静态字节[]FromHex(字符串十六进制)
{
字节[]原始=新字节[hex.Length/2];
for(int i=0;i
在这里,你可以在小提琴中看到它的动作:


希望这对您的项目有所帮助并祝您好运

您很可能应该使用
编码.Unicode
将字符串转换为字节数组:很可能有些字符不能用ASCII字符表示

编码。Unicode
UTF-16LE
)总是使用2个字节,因此它是可预测的:十六进制字符串中4个字符的序列总是表示一个
UFT-16
码点。
无论输入字符串包含什么字符

将字符串转换为十六进制:

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());
var bytes=新列表();
对于(int i=0;i<十六进制长度;i+=2){
Add(byte.Parse(hex.Substring(i,2),NumberStyles.HexNumber));
}
string original=Encoding.Unicode.GetString(bytes.ToArray());

您很可能应该使用
编码.Unicode
将字符串转换为字节数组:很可能有些字符不能用ASCII字符表示

编码。Unicode
UTF-16LE
)总是使用2个字节,因此它是可预测的:十六进制字符串中4个字符的序列总是表示一个
UFT-16
码点。
无论输入字符串包含什么字符

将字符串转换为十六进制:

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());
var bytes=新列表();
对于(int i=0;i<十六进制长度;i+=2){
Add(byte.Parse(hex.Substring(i,2),NumberStyles.HexNumber));
}
string original=Encoding.Unicode.GetString(bytes.ToArray());

此答案似乎运行良好(未测试其他答案,它们也可以运行)此答案是否回答您的问题?@Knoop不完全回答,因为我在问题“{,”:“字符转换不正确我更新了我的问题,请检查那里@Knoop此答案运行良好(没有测试其他答案,它们也可以工作)这回答了你的问题吗?@Knoop没有准确回答,因为正如我在问题中所说的'{',':'字符未正确转换我更新了我的问题,请检查@knoop当我检查时,您的参考答案看起来不错当我将所有json设置为byte,然后转换为hex时,也可以,但我也接受您的答案谢谢您的帮助实际上当我检查时,您的参考答案看起来不错当我将所有json设置为byte和那么转换十六进制也可以,但我也接受你的答案谢谢你的帮助