C# 如何将单独的int值转换为十六进制字节数组

C# 如何将单独的int值转换为十六进制字节数组,c#,tcp,hex,byte,tcp-ip,C#,Tcp,Hex,Byte,Tcp Ip,我需要做一些(对我来说是新的)int/hex/byte工作,我正在努力使它正确。另一端的tcp服务器需要小的Endian 我需要发送一个由十六进制值组成的字节数组 6000需要发送为: 0x70、0x17 19需要发送为: 0x13、0x00、0x00、0x00 生成的字节数组应该如下所示 **FROM THE MANUFACTURER** Complete message should be: 0x70, 0x17, 0x13, 0x00, 0x00, 0x00, 0x40, 0x42,

我需要做一些(对我来说是新的)int/hex/byte工作,我正在努力使它正确。另一端的tcp服务器需要小的Endian

我需要发送一个由十六进制值组成的字节数组

6000
需要发送为:

0x70、0x17

19
需要发送为:

0x13、0x00、0x00、0x00

生成的字节数组应该如下所示

**FROM THE MANUFACTURER**
Complete message should be: 

0x70, 0x17, 0x13, 0x00, 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x04, 0x01, 0x02, 0x03, 0x04
我可以使用:
.ToString(“x4”)
我可以使用:
.ToString(“x8”)

我有两个问题:

  • 据我所知,这是大端语。除了切碎字符串并手动重写以反转它之外,有没有一个.net例程可以帮我做到这一点

  • 一旦我把它倒过来,我怎么才能得到它呢

  • 7017

    在以下字节数组中:

    [0]=0x70[1]=0x17

    提前感谢。

    您可以使用该类实现转换。 结果实际上已经存在于您需要的约定中。不需要恢复

    byte[] res6000 = BitConverter.GetBytes(6000);
    byte[] res19 = BitConverter.GetBytes(19);
    
    // TEST OUTPUT for example
    Console.WriteLine(" 6000 -> : " + String.Join("", res6000.Select(x => x.ToString("X2"))));
    Console.WriteLine("  19  -> : " + String.Join("", res19.Select(x=>x.ToString("X2"))));
    
    输出:

    6000->:70170000
    19->:13000000

    下面是一个执行此任务的小方法,它包含您想要的字节数:

    public byte[] TransformBytes(int num, int byteLength)
    {
        byte[] res = new byte[byteLength];
    
        byte[] temp = BitConverter.GetBytes(num);
    
        Array.Copy(temp, res, byteLength);
    
        return res;
    }
    
    然后您可以调用它并将结果合并到如下列表中:

    List<byte> allBytesList = new List<byte>();
    
    allBytesList.AddRange(TransformBytes(   6000, 2));
    allBytesList.AddRange(TransformBytes(     19, 4));
    allBytesList.AddRange(TransformBytes(1000000, 4));
    allBytesList.AddRange(TransformBytes( 100000, 4));
    allBytesList.AddRange(TransformBytes(      4, 1));
    
    Console.WriteLine(" All -> : " + String.Join(" ", allBytesList.Select(x => x.ToString("X2"))));
    

    你到底需要哪种格式?从6000开始,它应该以
    字节[]{0x70,0x17}
    结束。您是否发送原始字节?然后
    BitConverter.GetBytes(值)比字符串更合适。一旦有了字节数组,只需调用
    array.Reverse(bytes)以反转您的字节。@MongZhu和@fairtrax。制造商消息指出,电线上的最终数据应该是一个字节数组,如下所示:
    0x70、0x17、0x13、0x00、0x00、0x00、0x00、0x40、0x42、0x0f、0x00、0xA0、0x86、0x01、0x00、0x04、0x01、0x02、0x03、0x04
    I在java中使用位运算符执行此类操作,将数字的每8位向右移位,转换为字节等,这要复杂得多:D但很有趣,只是在玩位。你发送格式化的字符串还是字节
    0x70、0x17
    etc只是人类可读的字节形式,但“在线”的字节是每字节1个字节,而不是4个字节(0x17是23等)。如果您真的对它们进行格式化并发送以逗号分隔的字符串,请使用下面的Mong-Zhu代码。感谢堆栈提供了这一非常详细的答案!非常感谢。至少现在服务器正在返回一些数据。关于阅读上述数据的下一个挑战。Thanks@LouisvanTonder不客气。祝您在服务器聊天时好运;)
    byte [] b_array = allBytesList.ToArray();