微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 4x 0-16 个数字存储在一个 short或一个字节中的 2 个数字

如何解决将 4x 0-16 个数字存储在一个 short或一个字节中的 2 个数字

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

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

例如; 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
,

移入移出

String a = "D:\\Folder\\Folder2\\file.txt";
System.out.print(a.substring(0,a.lastIndexOf("\\")));

输出

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。