C#上位机嵌入式编程(一):16进制数据向Byte数组的转化
(1)使用System.BitConverter
static void Main(string[] args){ UInt64 sendData = 0xA000A908020001FE; byte[] bs = System.BitConverter.GetBytes(sendData);
//输出
for (int i = 0; i < bs.Length; i++) { Console.WriteLine(bs[i]); } }
(2)利用泛型接口List<T>
static void Main(string[] args) { List<byte> frameBytes = new List<byte>(); frameBytes.Add(0XA0); frameBytes.Add(0X00); frameBytes.Add(0XA9); frameBytes.Add(0X08); frameBytes.Add(0X02); frameBytes.Add(0X00); frameBytes.Add(0X01); frameBytes.Add(0XFE); byte[] bss = frameBytes.ToArray();
//输出 for (int i = 0; i < bss.Length; i++) { Console.WriteLine(bss[i]); } }
(2.1)直接定义byte数组:
private byte[] sendFrame = new byte[] { 0xA0, 0x00, 0xA9, 0x08, 0x02, 0x00, 0x01, 0xFE };
(3)encoding
string message = "this is a message"; Encoding.Default.GetBytes(message); //or string message = "this is a message"; Encoding.ascii.GetBytes(message);
输出结果:

方法(一)与方法(二)所得结果刚好相反
暂不清楚是何原因。
2022.8.25补充
由于单片机常用串口通信,串口按位(bit)发送和接收字节,因此做单片机上位机时,需明确一个思路,发送的任何消息都是一个bit流。想清楚这个问题后,许多疑惑会迎刃而解:
例如:为什么用上位机程序中用byte数组保存指令,为什么单片机指令说明书中表示指令要用16进制
答:其实指令是数字+字母+符号的组合(如:2B3.)
byte数组会将字符以ASCII的形式保存为bit串
ASCII为0-127(刚好用一个16进制表示,上述 "2B3." 即为 "0x33 0x42 0x32 0x2e")
浙公网安备 33010602011771号