C# 在短时间内存储4x 0-16个数字(或在一个字节中存储2个数字)

C# 在短时间内存储4x 0-16个数字(或在一个字节中存储2个数字),c#,hex,pack,C#,Hex,Pack,我将一些二进制数据打包为一个简短的字符串,但希望有4x的0-F值。。并且希望在没有大量switch()案例读取字符串的情况下执行此操作 有人对此有一个聪明、优雅的解决方案,还是我应该直接解决 eg1C4A=(1,12,4,10)您可以移动4(或除以16)将数字移动到不同的位置值。然后屏蔽并移动打包的号码,以恢复原始号码 例如,如果要存储1和2,可以执行以下操作: int packed = (1 << 4) + 2; int v1 = (packed & 0xF0) >&

我将一些二进制数据打包为一个简短的字符串,但希望有4x的0-F值。。并且希望在没有大量switch()案例读取字符串的情况下执行此操作

有人对此有一个聪明、优雅的解决方案,还是我应该直接解决

eg
1C4A=(1,12,4,10)

您可以移动4(或除以16)将数字移动到不同的位置值。然后屏蔽并移动打包的号码,以恢复原始号码

例如,如果要存储1和2,可以执行以下操作:

int packed = (1 << 4) + 2;
int v1 = (packed & 0xF0) >> 4;
int v2 = packed & 0x0F;

Console.WriteLine($"{v1}, {v2}");
>>> 1, 2
int-packed=(1>4;
int v2=压缩&0x0F;
WriteLine($“{v1},{v2}”);
>>> 1, 2
您可以通过移位4(或除以16)将数字移动到不同的位置值。然后屏蔽并移位压缩的数字以恢复原始数字

例如,如果要存储1和2,可以执行以下操作:

int packed = (1 << 4) + 2;
int v1 = (packed & 0xF0) >> 4;
int v2 = packed & 0x0F;

Console.WriteLine($"{v1}, {v2}");
>>> 1, 2
int-packed=(1>4;
int v2=压缩&0x0F;
WriteLine($“{v1},{v2}”);
>>> 1, 2
移入和移出

var a = 1;
var b = 12;
var c = 4;
var d = 10;

// in
var packed = (short) ((a << 12) | (b << 8) | (c << 4) | d);

// out
a = (packed >> 12) & 0xf;
b = (packed >> 8) & 0xf;
c = (packed >> 4) & 0xf;
d = packed & 0xF;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
进出

var a = 1;
var b = 12;
var c = 4;
var d = 10;

// in
var packed = (short) ((a << 12) | (b << 8) | (c << 4) | d);

// out
a = (packed >> 12) & 0xf;
b = (packed >> 8) & 0xf;
c = (packed >> 4) & 0xf;
d = packed & 0xF;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);

请显示您迄今为止尝试过的内容。Title在一个字节中指定了2x个数字。Body在一个短字节中指定了4x个数字。请更正其中一个。如果您想要两个字节,我会说在一个结构上使用
ExplicitLayout
,但在Base16上不能这样做。请显示您迄今为止尝试过的内容。Title在一个字节中指定了2x个数字。Body spec如果在短时间内显示4个数字。请更正其中一个。如果您想要两个字节,我会说在结构上使用
ExplicitLayout
,但在base16上不能这样做