Hi3861怎么用C语言实现字符串转比特16进制

我想用Hi3861的uart串口发送16进制命令(BB 00 22 00 00 22 7E),但是一直不成功
下面代码是C#中将十六进制字符串转换为byte数组,可以成功通信

 byte[] array = null;
            string text = "BB 00 22 00 00 22 7E ";
            
            text = text.Replace(" ", "");

            if (text.Length % 2 == 1)
            {
                text = text.Remove(text.Length - 1, 1);
            }
            
            List list  = new List();
            for (int i = 0; i < text.Length; i += 2)
            {
                list.Add(text.Substring(i, 2));
            }

            array = new byte[list.Count];
            for (int j = 0; j < array.Length; j++)
            {
                array[j] = (byte)Convert.ToInt32(list[j], 16);
                
            }

下图代码是树莓派用Python将字符串转换为16进制,可以成功通信

img

下图是我C语言中直接用uint_8类型存的16进制并发送,通信失败

img

请问C语言中该怎么修改才能实现类似于C#和python中的效果并成功通信?

https://leung-manwah.blog.csdn.net/article/details/126336791

该回答引用GPTᴼᴾᴱᴺᴬᴵ
C语言相比于C#和Python,较为底层,需要自己实现底层的网络通信协议和数据序列化等操作,相对比较复杂。但是如果您想要在C语言中实现网络通信,可以考虑以下步骤:

  1. 建立网络连接
    在C语言中建立网络连接需要使用socket,您可以通过socket函数创建一个socket对象并指定协议类型、IP地址、端口号等参数。具体可以参考socket函数的文档说明。
  2. 实现数据传输
    在建立好网络连接后,需要实现数据的传输。在C语言中,您可以使用send函数和recv函数分别发送和接收数据,也可以使用read函数和write函数来实现。
  3. 数据序列化
    在进行数据传输时,需要将数据进行序列化和反序列化。在C语言中,可以使用结构体或数组来表示数据,并使用指针进行操作。需要注意的是,在进行网络传输时,要注意数据的字节序(大端序或小端序)的问题。
  4. 实现协议
    为了确保数据传输的可靠性和安全性,需要实现协议。协议可以包括数据的格式、传输方式、校验等内容。

总的来说,实现网络通信需要考虑的因素较多,需要对C语言底层的网络编程有深入的了解。如果您不熟悉C语言底层的网络编程,可以参考相关书籍或网上的教程进行学习。