如何将大于 255 的小数转换为两个 8 位(2 字节)
How to convert a decimal larger than 255 into two of 8-bit (2 Bytes)
好的,我知道如何将十进制转换为 8-bit
例如,字符“A”的十进制是 65
转成二进制很简单
但是如果小数大于 255
怎么办
例如,阿拉伯字符 "م"
十进制为 1605
,二进制为 11001000101
当我在任何网站上转换它时,它显示 11011001 10000101
我想知道 11001000101
是如何 11011001 10000101
看起来你正在使用 UTF-8 character encoding,在 Python 你可以这样做:
>>> "_".join(f"{byte:08b}" for byte in "م".encode("utf8"))
'11011001_10000101'
您的阿拉伯语字符“م”的十进制代码点为 1605。十六进制为 0645h,二进制为 0000'0110'0100'0101b。
utf-8 编码将用 1 个字节表示代码点在 U+0000 到 U+007F 范围内的所有字符,使用下一个模板:
0_______
^
| 7 bits
utf-8 编码将用 2 个字节表示代码点在 U+0080 到 U+07FF 范围内的所有字符。您的阿拉伯字符“م”在此范围内位于 U+0645h。
当处理 2 个字节时,模板变为
110_____ 10______
^ ^
| | 6 bits
| 5 bits
在此模板中,我们填写代码点 11001'000101b 的二进制表示的最低(仅)11 位:
110_____ 10______
^ ^
| 11001 | 000101
这会产生二进制 110'11001'10'000101b
下面是[U+128, U+2047]码位转换的x86汇编版本:
<------ AX ------->
mov ax, 1605 ; Your example: 0000 0110 0100 0101
/ /
/ / Shift left the whole 16 bits, twice
shl ax, 2 0001 1001 0001 0100
\ \
\ \ Shift right the lowest 8 bits, twice
shr al, 2 0001 1001 0000 0101
||| ||
||| || Put in the template bits
or ax, 1100000010000000b 1101 1001 1000 0101
<- AH --> <-- AL ->
现在AH
寄存器包含utf-8编码的第一个字节,AL
寄存器包含utf-8编码的第二个字节。
因为 x86 是小端架构,最低字节首先存储在内存中,xchg al, ah
指令将在将结果移动到内存之前确定字节的顺序:
mov [somewhere], ax
.
好的,我知道如何将十进制转换为 8-bit
例如,字符“A”的十进制是 65
转成二进制很简单
但是如果小数大于 255
怎么办
例如,阿拉伯字符 "م"
十进制为 1605
,二进制为 11001000101
当我在任何网站上转换它时,它显示 11011001 10000101
我想知道 11001000101
是如何 11011001 10000101
看起来你正在使用 UTF-8 character encoding,在 Python 你可以这样做:
>>> "_".join(f"{byte:08b}" for byte in "م".encode("utf8"))
'11011001_10000101'
您的阿拉伯语字符“م”的十进制代码点为 1605。十六进制为 0645h,二进制为 0000'0110'0100'0101b。
utf-8 编码将用 1 个字节表示代码点在 U+0000 到 U+007F 范围内的所有字符,使用下一个模板:
0_______
^
| 7 bits
utf-8 编码将用 2 个字节表示代码点在 U+0080 到 U+07FF 范围内的所有字符。您的阿拉伯字符“م”在此范围内位于 U+0645h。
当处理 2 个字节时,模板变为
110_____ 10______
^ ^
| | 6 bits
| 5 bits
在此模板中,我们填写代码点 11001'000101b 的二进制表示的最低(仅)11 位:
110_____ 10______
^ ^
| 11001 | 000101
这会产生二进制 110'11001'10'000101b
下面是[U+128, U+2047]码位转换的x86汇编版本:
<------ AX ------->
mov ax, 1605 ; Your example: 0000 0110 0100 0101
/ /
/ / Shift left the whole 16 bits, twice
shl ax, 2 0001 1001 0001 0100
\ \
\ \ Shift right the lowest 8 bits, twice
shr al, 2 0001 1001 0000 0101
||| ||
||| || Put in the template bits
or ax, 1100000010000000b 1101 1001 1000 0101
<- AH --> <-- AL ->
现在AH
寄存器包含utf-8编码的第一个字节,AL
寄存器包含utf-8编码的第二个字节。
因为 x86 是小端架构,最低字节首先存储在内存中,xchg al, ah
指令将在将结果移动到内存之前确定字节的顺序:
mov [somewhere], ax
.