|
本帖最后由 Starrry 于 2022-2-2 12:45 编辑
没问题,先简单叙述一下:
4字节的UTF-8都是以1111 xxxx 开始的
3字节的UTF-8是以1110 xxxx 开始的
2字节的UTF-8是以1100 xxxx 开始的
1字节的UTF-8(也就是ASCII)是以0开始的,如01111 1111.
只剩下10xx xxxx,也就是Continuation Byte,是那些2~4字节后面的组成成分。
这么一来,这个方程式就一目了然,如:
if code>=011110000b then
goto _4byte
else if code>=011100000b then
goto _3byte
else if code>=011000000b then
goto _2byte
else if code<=01111111b then
goto _1byte
else
// it is continuation byte, ignore it
- cmp dl, 011110000b
- jae _4byte
- cmp dl, 011100000b
- jae _3byte
- cmp dl, 011000000b
- jae _2byte
- cmp dl, 001111111b
- jbe _1byte
-
- ;the others are continuation byte, don't count
复制代码
0x28+0xD=53字节,比在线的显示结果(52字节)多了一个字节,那是因为文本文件结尾多了一个0xA(换行符)。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|