Geu*_*uis 15 javascript byte nibble
我在javascript中解析一个二进制文件,每个字节存储两条信息,每个半字节一个.这些值当然是0-16和0-16.
在文件格式的所有其他部分中,每个字节代表一条信息,因此我一直使用以下方法成功获取所需的数字值:
var num = str.charCodeAt(0) & 0xFF;
Run Code Online (Sandbox Code Playgroud)
但是我一直试图弄清楚如何获得第一个半字节的0-16值,并且从我的单字节字符"str"获得第二个半字节的值.
感谢任何帮助.
sje*_*397 15
var num = str.charCodeAt(0) & 0xFF;
var nibble1 = num & 0xF;
var nibble2 = num >> 4;
Run Code Online (Sandbox Code Playgroud)
cod*_*ict 15
你可以做:
var num = str.charCodeAt(0);
var lower_nibble = (num & 0xF0) >> 4;
var higher_nibble = num & 0x0F;
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
让我们假设比特表示num
是abcdwxyz
,我们想提取abcd
更高的半字节和wxyz
更低的半字节.
要提取较低的半字节,我们只需通过按位和数字掩盖较高的半字节0x0F
:
a b c d w x y z
&
0 0 0 0 1 1 1 1
---------------
0 0 0 0 w x y z = lower nibble.
Run Code Online (Sandbox Code Playgroud)
为了提取更高的半字节,我们首先通过按位和0xF0
as来屏蔽低半字节:
a b c d w x y z
&
1 1 1 1 0 0 0 0
---------------
a b c d 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
然后我们按位右移右移4次以消除尾随零.
按位右移一个变量1次会使它松开最右边的位并使最左边的位为零:
a b c d w x y z
>> 1
----------------
0 a b c d w x y
Run Code Online (Sandbox Code Playgroud)
类似地,按位右移位2
时间将导致结果:
a b c d w x y z
>> 2
----------------
0 0 a b c d w x
Run Code Online (Sandbox Code Playgroud)
和按位右移4
时间给出:
a b c d w x y z
>> 4
----------------
0 0 0 0 a b c d
Run Code Online (Sandbox Code Playgroud)
清楚地看到结果是byte(abcd
)的高半字节.
归档时间: |
|
查看次数: |
4478 次 |
最近记录: |