首页 > 解决方案 > 如何将整数更改为 2 个字节

问题描述

我有一个算法问题需要解决。但是花了一天时间掌握了这个问题后,我并没有真正理解这个问题。

问题:对于这个任务,你需要编写一个包含一对函数的小程序,

将整数转换为特殊的文本编码编码函数

该函数需要接受一个 14 位范围 [-8192..+8191] 的有符号整数,并返回一个 4 个字符的字符串。

编码过程如下:

1.将 8192 添加到原始值,因此其范围转换为 [0..16383] 2.将该值打包成两个字节,以便清除每个字节的最高有效位

未编码的中间值(作为 16 位整数):

00HHHHHH

编码值:

0HHHHHHH 0LLLLLLL

1 个,共 3 个

将这两个字节格式化为一个 4 字符的十六进制字符串并返回它。样本值:

未编码(十进制) | 中间(十进制) | 中级(十六进制) | 编码(十六进制)

0 | 8192 | 2000 | 4000

-8192 | 0 | 0000 | 0000

8191 | 16383 | 3ff | 7F7F

2048 | 10240 | 2800 | 5000

-4096 | 4096 | 1000 | 2000

“2.将该值打包成两个字节,以便清除每个字节的最高有效位”部分现在是我的障碍。

我应该如何处理这个指令?非常感谢你。

我试图通过下面的代码将数字转换为 16 位。但我不知道下一步该怎么做。

let rawInput = parseInt(document.getElementById("inputValue").value);
let interDec= Number.parseInt(rawInput) + 8192
let interHex = interDec.toString(16)

标签: javascriptalgorithm

解决方案


当您将 8192 添加到整数时,您就有了种类的值(二进制表示)00HHHHHH HLLLLLLL

1) 您必须保留正确的 ( ) 位 - 只需使用位掩码((binary ))L用按位与分隔它​​们0x7f00000000 01111111

2) 将所有值左移,得到0HHHHHHH LLLLLLL0,现在H位留在最后的位置

3)使用掩码(二进制)H用按位与分隔位0x7f0001111111 00000000

4)用二进制或将低和高部分组合在一起

Python 示例

v = 0x3fff
ev = (v & 0x7f) | ((v<<1) & 0x7f00)
print(hex(ev))

>>>0x7f7f

推荐阅读