如何将大于 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.