首页 > 解决方案 > 将 4 个 0-16 数字存储在一个短字节中(或 2 个数字存储在一个字节中)

问题描述

我将一些二进制数据打包为一个简短的,但希望有 0-F 的 4x 值。并且希望在没有一堆 switch() 案例读取十六进制的 string.split 的情况下做到这一点

有人对此有一个聪明,优雅的解决方案,还是我应该长期处理它?

例如;1C4A = (1, 12, 4, 10)

标签: c#hexpack

解决方案


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

例如,如果你想存储 1 和 2,你可以这样做:

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

Console.WriteLine($"{v1}, {v2}");
>>> 1, 2

推荐阅读