Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的字节数组操作#_C#_Bytearray_Bit Manipulation - Fatal编程技术网

C# c语言中的字节数组操作#

C# c语言中的字节数组操作#,c#,bytearray,bit-manipulation,C#,Bytearray,Bit Manipulation,我花了好几个小时想弄明白如何操作字节数组来用C#进行“解包”和打包 压缩数据格式 数据打包在8字节的“数据包”中,MS位从7字节剥离 参数字节,并压缩为第八个字节,在开始时发送 8字节数据包的一部分 例如: 每行表示一个字节,每列表示一位(MSB在先) 如何实现此转换?如果我正确地阅读了规范,这应该可以做到: byte[] input = new byte[7] { 0x81, 0x82, 0x03, 0x84, 0x05, 0x06, 0x87 }; byte[] output = new

我花了好几个小时想弄明白如何操作字节数组来用C#进行“解包”和打包

压缩数据格式

数据打包在8字节的“数据包”中,MS位从7字节剥离 参数字节,并压缩为第八个字节,在开始时发送 8字节数据包的一部分

例如:

每行表示一个字节,每列表示一位(MSB在先)


如何实现此转换?

如果我正确地阅读了规范,这应该可以做到:

byte[] input = new byte[7] { 0x81, 0x82, 0x03, 0x84, 0x05, 0x06, 0x87 };

byte[] output = new byte[8];

for (int i = 0; i < 7; i++)
{
    output[0] |= (byte)((input[i] >> 7) << i);
    output[i + 1] = (byte)(input[i] & 0x7F);
}

// output == { 0x4b, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }

// output[0] == 0b01001011
byte[]input=新字节[7]{0x81、0x82、0x03、0x84、0x05、0x06、0x87};
字节[]输出=新字节[8];
对于(int i=0;i<7;i++)
{

输出[0]|=(字节)((输入[i]>>7)我觉得你的问题停了一半…规范和示例来自,并且似乎没有提供比问题中的内容更多的细节。因此,我想需要一些独创性来解决如何实现这种转换。我想我理解:行表示一个字节,行中的每个位置表示一位e值实际上是解包序列(排序)中字节的数字/位置,A=1字节,B=2字节,等等。字母后的数字是字节中指示数字位置的实际位。这是我的猜测,我不确定,因此没有答案。请发布您尝试过的代码。
byte[] input = new byte[7] { 0x81, 0x82, 0x03, 0x84, 0x05, 0x06, 0x87 };

byte[] output = new byte[8];

for (int i = 0; i < 7; i++)
{
    output[0] |= (byte)((input[i] >> 7) << i);
    output[i + 1] = (byte)(input[i] & 0x7F);
}

// output == { 0x4b, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }

// output[0] == 0b01001011