将2个4位数字存储在1个8位数字中

时间:2018-07-07 01:10:28

标签: encoding binary hex

我在考虑二进制数字方面是新手。我想知道是否有一种方法可以将2个4位数字(即十六进制编码的数字)编码为1个8位数字。因此,如果我将a5用作十六进制数字,那将是10和5。也许有一种方法可以将其存储在1个8位数字中,这样您就可以得到它。从8位数字返回到其组成的4位部分。

[10, 5]! = 15
15! = [10, 5]

想知道是否有一种方法可以对数字进行编码。

这似乎是可能的,因为第一个值可以存储在前16位中,然后下一个值可以存储在其余中,使用16表示1、32表示2、2表示,3表示等,< / p>

无法确定此处的答案是怎么做:

How can i store 2 numbers in a 1 byte char?

没有真正给出我想要的东西:

> a = 10
10
> b = 5
5
> c = a + b
15
> d = (c & 0xF0) >> 4
0
> e = c & 0x0F
15

也许我不确定使用方式是否正确。看起来也可能如此,但是我不太确定如何在JavaScript中完成此操作。

How to combine 2 4-bit unsigned numbers into 1 8-bit number in C

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

我认为第一篇文章有​​钥匙。

使用a5作为要存储的两个4位十六进制数字,您可以将它们存储在变量中,例如:

var store = 0xa5;

或动态

var store = parseInt('0x' + ('a' + '9'), 16);

然后提取零件:

var number1 = ((store & 0xF0) >> 4).toString(16)
var number2 = ((store & 0x0F)).toString(16)

我希望这会有所帮助。

答案 1 :(得分:1)

是的,大多数编程语言都支持。您必须进行按位操作。以下是Java中的示例。

编码(预先验证输入)

byte in1 = <valid input>, in2 = <valid input>;
byte out = in1<<4 | in2;

要解码:

byte in = <valid input>;
byte out1 = in>>4;
byte out2 = in & 0x0f;