如何从字符串动态生成符合十六进制格式的byte数组?
解决方案
首先你完全绕了个没必要的弯——硬编码里的0x46本质就是字符'F'的ASCII字节值,0x30是'0'的ASCII字节值,所以根本不需要先转成十六进制字符串再转回byte,直接把char强制转成byte就行:
var ListByte = new List<byte>(); foreach (char val in messageToConvert) { byte val_ = (byte)val; // 直接强制转换,一步到位 ListByte.Add(val_); }
如果你的场景确实需要从十六进制字符串(比如你构造的0xXX格式)转成byte,那先修正你的字符串格式(去掉多余的冒号,改成0xXX),然后用byte.Parse或者Convert.ToByte处理:
// 先修正字符串构造逻辑,去掉冒号 var hexa_decimal_val = $"0x{Convert.ToInt32(val).ToString("X")}"; // 转换byte byte val_ = byte.Parse(hexa_decimal_val, System.Globalization.NumberStyles.HexNumber);
或者更简洁的,直接用Convert.ToByte,不需要加0x前缀,直接传十六进制字符串:
var hexa_str = Convert.ToInt32(val).ToString("X"); byte val_ = Convert.ToByte(hexa_str, 16);
总结下:
- 最直接的方案是直接把char转成byte,完全匹配你硬编码的逻辑
- 如果一定要走十六进制字符串的路子,先修正格式,再用内置方法转换,不需要自己写转换函数
内容的提问来源于stack exchange,提问作者david9990
相关产品推荐
相关产品推荐

