C#如何将十六进制字符串转换为比特数组(以"03"为例)
在C#中将十六进制字符串"03"转换为8比特数组的方法
嘿,我来帮你搞定这个问题!把十六进制字符串转成8位的比特数组在C#里其实很容易,我给你两种实用的方案:
方案一:利用Convert.ToByte和BitArray快速转换
这种方法适合大部分场景,步骤简洁:
string hexValue = "03"; // 第一步:将十六进制字符串转换为单个字节 byte byteValue = Convert.ToByte(hexValue, 16); // 第二步:用字节初始化8位的BitArray BitArray bitArray = new BitArray(new[] { byteValue }); // 注意:BitArray默认按**最低有效位在前**存储,比如0x03的二进制是`00000011`, // 此时bitArray的顺序是 [true, true, false, false, false, false, false, false] // 如果需要和十六进制对应的高位到低位顺序,需要反转数组 bool[] bitArrayResult = new bool[8]; bitArray.CopyTo(bitArrayResult, 0); Array.Reverse(bitArrayResult); // 现在bitArrayResult就是高位到低位的8比特数组:[false, false, false, false, false, false, true, true]
关键说明
Convert.ToByte(hexValue, 16)会直接把"03"解析为字节0x03(十进制3),正好对应8位。- 反转操作是为了匹配我们日常习惯的“高位在前”的二进制顺序,如果业务逻辑允许最低位在前,也可以跳过反转。
方案二:手动解析每个十六进制字符(精确控制顺序)
如果你需要更精细地控制比特的顺序,或者想理解底层逻辑,可以手动拆分每个十六进制字符(每个字符对应4位):
string hexValue = "03"; bool[] bitArray = new bool[8]; // 处理第一个十六进制字符"0"(对应高4位) int highNibble = Convert.ToInt32(hexValue[0].ToString(), 16); for (int i = 0; i < 4; i++) { // 从高位到低位依次提取每一位 bitArray[i] = (highNibble & (1 << (3 - i))) != 0; } // 处理第二个十六进制字符"3"(对应低4位) int lowNibble = Convert.ToInt32(hexValue[1].ToString(), 16); for (int i = 0; i < 4; i++) { bitArray[4 + i] = (lowNibble & (1 << (3 - i))) != 0; } // 最终bitArray就是高位到低位的8比特数组:[false, false, false, false, false, false, true, true]
额外提示
- 转换前最好校验一下十六进制字符串的长度:
if (hexValue.Length != 2),避免因字符串长度错误导致转换失败。 - 如果你的“比特数组”指的是
byte[]类型(而非bool[]),那么Convert.ToByte得到的单个字节本身就是8位的,直接放到数组里即可:byte[] byteArray = new[] { byteValue };
内容的提问来源于stack exchange,提问作者fusolage




