javascript - 如何将整数更改为 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)
解决方案
当您将 8192 添加到整数时,您就有了种类的值(二进制表示)00HHHHHH HLLLLLLL
1) 您必须保留正确的 ( ) 位 - 只需使用位掩码((binary ))L
用按位与分隔它们0x7f
00000000 01111111
2) 将所有值左移,得到0HHHHHHH LLLLLLL0
,现在H
位留在最后的位置
3)使用掩码(二进制)H
用按位与分隔位0x7f00
01111111 00000000
4)用二进制或将低和高部分组合在一起
Python 示例
v = 0x3fff
ev = (v & 0x7f) | ((v<<1) & 0x7f00)
print(hex(ev))
>>>0x7f7f
推荐阅读
- r - R计算日期差异时的函数错误
- c++ - Boost Python - 对`_Py_NoneStruct'的未定义引用
- python - txt 中的数据格式。文件
- javascript - Javascript:什么是 Http 服务中的 reportProgress?
- testng - TestNG-每次运行后都会覆盖结果
- javascript - WebAudio 音频上下文内存泄漏
- node.js - 使用nodejs进行http post请求时出错
- c# - Linq-To-Sql ORM 更新一对多
- javascript - Chrome 扩展:打开开发工具面板 Onclick
- reactjs - 如何更改 react-popper-tooltip 的箭头颜色?