C#数组位级转置:10×8字节数组转8×10位整数数组
嘿,看起来你需要把一个10×8的字节矩阵转置成8×10的整数矩阵——本质上就是把原矩阵的每一列(10个二进制位)拼成一个整数,对吧?我帮你梳理下逻辑并给出可运行的C#代码。
问题分析
你给出的Matrix是10个8位字节,相当于一个10行8列的二进制矩阵;目标Matrix_res10是8个整数,每个整数包含10位,对应原矩阵的8列(每列10位),把每一列的10位按顺序拼成一个整数。
从示例可以明确对应规则:
- 目标数组的第i个元素,对应原矩阵中所有字节的第(7-i)位(比如
Matrix_res10[0]对应所有字节的第7位) - 每一列的10位,从原数组的第0个元素到第9个元素的对应位,依次作为目标整数的第9位到第0位(高位到低位)
实现代码
以下是完全匹配你示例需求的C#代码:
// 原10×8字节矩阵 byte[] Matrix = new byte[] { 0b01111011, 0b10001100, 0b10101101, 0b10100001, 0b11010110, 0b00011100, 0b00111000, 0b11001111, 0b01111011, 0b10101010 }; // 初始化目标8×10整数矩阵 int[] Matrix_res10 = new int[8]; for (int col = 0; col < 8; col++) { int currentInt = 0; // 对应原字节的位位置:从第7位到第0位,匹配目标数组的顺序 int byteBitPos = 7 - col; for (int row = 0; row < 10; row++) { // 提取当前字节的指定位 bool isBitSet = (Matrix[row] & (1 << byteBitPos)) != 0; if (isBitSet) { // 将该位设置到目标整数的对应位置(原数组第0个元素对应整数最高位) currentInt |= 1 << (9 - row); } } Matrix_res10[col] = currentInt; } // 验证输出(可选,打印10位二进制字符串) foreach (int num in Matrix_res10) { Console.WriteLine(Convert.ToString(num, 2).PadLeft(10, '0')); }
代码说明
- 外层循环:遍历目标数组的8个元素,对应原矩阵的8列。
- 字节位定位:
byteBitPos = 7 - col确保我们从原字节的最高位(第7位)开始,依次取到最低位(第0位),和目标数组的顺序对应。 - 内层循环:遍历原数组的10个字节,用位运算
&提取指定位,再用|=将该位设置到目标整数的对应位置(保证原数组第0个元素的位对应整数的最高位)。 - 验证输出:通过
Convert.ToString把整数转成二进制字符串,PadLeft补全到10位,方便你直接核对结果是否和示例一致。
运行这段代码后,Matrix_res10的内容会完全匹配你给出的示例。
内容的提问来源于stack exchange,提问作者Vaga
相关产品推荐
相关产品推荐

