在 C# 中字节到半字节到字到字节
Bytes to Nibbles to Words to Bytes in C#
我有一个我需要的 3 字节数组
- 将每个字节转换为半字节
- 添加 Byte_0.Nibble_0 + Byte_0.Nibble_1 + Byte_1.Nibble_2 为 WORD
- 添加 Byte_1.Nibble_0 + Byte_2.Nibble_1 + Byte_2.Nibble_2 为 WORD
- 将每个 WORD 转换为字节数组
这是我试过的
private static void GetBytesToNibbles(byte[] currentThree, out byte[] a, out byte[] b)
{
var firstLowerNibble = currentThree[0].GetNibble(0);
var firstUpperNibble = currentThree[0].GetNibble(1);
var secondLowerNibble = currentThree[1].GetNibble(0);
var secondUpperNibble = currentThree[1].GetNibble(1);
var thirdLowerNibble = currentThree[2].GetNibble(0);
var thirdUpperNibble = currentThree[2].GetNibble(1);
a= new byte[] {firstLowerNibble, firstUpperNibble, secondLowerNibble, 0x00};
b= new byte[] {secondUpperNibble, thirdLowerNibble, thirdUpperNibble, 0x00};
}
获取 Nibble 扩展:
public static byte GetNibble<T>(this T t, int nibblePos)
where T : struct, IConvertible
{
nibblePos *= 4;
var value = t.ToInt64(CultureInfo.CurrentCulture);
return (byte) ((value >> nibblePos) & 0xF);
}
我做的是否正确,如图所示?如果没有,谁能帮我提供正确的代码?
这并不完美,但它会给你一个 4 字节的数组,你应该可以自己拆分它。
图像令人困惑,因为它显示的是位数而不是示例值。我认为这就是您认为需要两个 4 字节数组的原因。
public static void Main()
{
byte byte0 = 0x11;
byte byte1 = 0x22;
byte byte2 = 0x33;
int low = BitConverter.ToInt32(new byte[]{byte0, byte1,0,0},0);
int high = BitConverter.ToInt32(new byte[] {byte1, byte2,0,0},0);
low = low & 0x0fff;
high = high & 0xfff0;
high = high << 12;
int all = high | low;
byte[] intBytes = BitConverter.GetBytes(all);
for (int i = 0; i < intBytes.Length; i++)
{
Console.WriteLine(String.Format("{0:X2}", intBytes[i]));
}
}
结果:
11
02
32
03
我有一个我需要的 3 字节数组
- 将每个字节转换为半字节
- 添加 Byte_0.Nibble_0 + Byte_0.Nibble_1 + Byte_1.Nibble_2 为 WORD
- 添加 Byte_1.Nibble_0 + Byte_2.Nibble_1 + Byte_2.Nibble_2 为 WORD
- 将每个 WORD 转换为字节数组
这是我试过的
private static void GetBytesToNibbles(byte[] currentThree, out byte[] a, out byte[] b)
{
var firstLowerNibble = currentThree[0].GetNibble(0);
var firstUpperNibble = currentThree[0].GetNibble(1);
var secondLowerNibble = currentThree[1].GetNibble(0);
var secondUpperNibble = currentThree[1].GetNibble(1);
var thirdLowerNibble = currentThree[2].GetNibble(0);
var thirdUpperNibble = currentThree[2].GetNibble(1);
a= new byte[] {firstLowerNibble, firstUpperNibble, secondLowerNibble, 0x00};
b= new byte[] {secondUpperNibble, thirdLowerNibble, thirdUpperNibble, 0x00};
}
获取 Nibble 扩展:
public static byte GetNibble<T>(this T t, int nibblePos)
where T : struct, IConvertible
{
nibblePos *= 4;
var value = t.ToInt64(CultureInfo.CurrentCulture);
return (byte) ((value >> nibblePos) & 0xF);
}
我做的是否正确,如图所示?如果没有,谁能帮我提供正确的代码?
这并不完美,但它会给你一个 4 字节的数组,你应该可以自己拆分它。
图像令人困惑,因为它显示的是位数而不是示例值。我认为这就是您认为需要两个 4 字节数组的原因。
public static void Main()
{
byte byte0 = 0x11;
byte byte1 = 0x22;
byte byte2 = 0x33;
int low = BitConverter.ToInt32(new byte[]{byte0, byte1,0,0},0);
int high = BitConverter.ToInt32(new byte[] {byte1, byte2,0,0},0);
low = low & 0x0fff;
high = high & 0xfff0;
high = high << 12;
int all = high | low;
byte[] intBytes = BitConverter.GetBytes(all);
for (int i = 0; i < intBytes.Length; i++)
{
Console.WriteLine(String.Format("{0:X2}", intBytes[i]));
}
}
结果:
11
02
32
03