c# - 将 4 个 0-16 数字存储在一个短字节中(或 2 个数字存储在一个字节中)
问题描述
我将一些二进制数据打包为一个简短的,但希望有 0-F 的 4x 值。并且希望在没有一堆 switch() 案例读取十六进制的 string.split 的情况下做到这一点
有人对此有一个聪明,优雅的解决方案,还是我应该长期处理它?
例如;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
推荐阅读
- mysql - 如何在烧瓶应用程序中显示以 base64 编码的 Summernote 图像?
- scala - 将用户输入字符与 Scala 中的字符进行比较
- sql - 将vba日期函数转换为sql
- r - 多项式卷积返回意外值
- linux - kmap_atomic 定义在哪里
- ms-access-2016 - Ms-Access - 此控件中没有对象
- javascript - 我无法通过 useRef Reactjs 钩子获取动态 div id,因为它反复返回相同的 id
- html - 提交表单时防止删除段落
- java - 哪个 Maven Parent POM 具有特定工件的版本
- excel - 使用字符串连接修改不同的范围值