tools / hex
hex/
文本和十六进制(hex)互转。字符集可选 UTF-8、GBK、UTF-16 等,输出可选分隔符、大写和 0x、\x 前缀。
文本
hex
常见问题
一个汉字转成十六进制是几个字节,为什么和别的工具结果不一样
取决于选的字符集。UTF-8 下常见汉字占 3 个字节,比如「中」是 e4 b8 ad;GBK、GB2312 下占 2 个字节,「中」是 d6 d0;emoji 在 UTF-8 下占 4 个字节。英文字母和数字在 UTF-8、GBK 下都是 1 个字节,结果一样。和别的工具对不上时,先确认对方用的是什么字符集,本工具默认 UTF-8。
十六进制转文本提示解出的字节不是有效文本,或者结果是乱码怎么办
说明这串字节不是按当前字符集编码的,换一个字符集试。中文内容最常见的是 UTF-8 和 GBK,老软件和数据库导出多用 GBK;UTF-16 的十六进制里通常有很多 00。本工具不会把解不出来的字节硬显示成乱码,只有 ISO-8859-1 例外,它的每个字节都对应一个字符,不会报错,但中文会变成乱码字符。GBK 和 GB2312 都用浏览器自带的 GB18030 解码器,比 Python、Java 宽松,选 GB2312 也能解出 GBK 才有的字。如果这串字节本来就不是文本(图片、加密数据、哈希值),选什么字符集都解不出来。
十六进制转文本能识别哪些写法
字母大小写都行。字节之间可以用空格、换行、制表符、冒号、逗号或短横线隔开,也可以不隔开;每个字节前可以带 0x 或 \x,0x48,0x65 和 \x48\x65 都能直接解。每两个分隔符之间的位数必须是偶数,所以 0x1 要写成 0x01;混进了 0-9、a-f 以外的字符也会报错,都会指出是第几个字符。U+4E2D、%E4%B8%AD 这类写法不认,URL 编码请用本站的 URL 工具。
怎么生成 0x48,0x65 或 \x48\x65 这种格式
分隔符选「,」、前缀选「0x」,得到 0x48,0x65,可以放进 C、Java 的字节数组;分隔符选「无」、前缀选「\x」,得到 \x48\x65,是 Python、C 字符串里的字节写法。前缀加在每个字节前面,所以分隔符选「无」再加 0x 会得到 0x480x65,一般用不上。「大写」只影响 a-f,0x 里的 x 不变。
UTF-16 的结果为什么开头多了 feff,和别的工具对不上
UTF-16 按 Java 的写法输出:开头写 FE FF(字节序标记),后面是大端,「中」是 fe ff 4e 2d;不带标记的 UTF-16BE 是 4e 2d,复制后去掉开头两个字节即可。UTF-32 是大端、没有标记,「中」是 00 00 4e 2d。解码时 UTF-16 认 FE FF(大端)和 FF FE(小端)开头,没有标记就按大端。
选 ASCII 或 ISO-8859-1 时输入中文为什么报错
ASCII 只能表示 0 到 127 的字符,ISO-8859-1 只到 U+00FF(西欧带重音的字母,没有汉字)。超出范围的字符会报「字符「中」无法用 ASCII 编码」,不会像 Java 的 getBytes 那样悄悄换成 ?。GBK 和 GB2312 同理,emoji 和码表里没有的生僻字会报错,换成 UTF-8 或 GB18030 就能转。
输入的空格和换行会被转换吗
文本转 hex 时会。输入框里的每个字符都参与转换,包括首尾的空格和换行:空格是 20,换行是 0a。浏览器的输入框把换行统一成 \n,所以多行文本里的换行是 0a 而不是 0d 0a,需要 Windows 换行的话在结果里自己改。反过来,hex 转文本时 hex 里的空白会被忽略,只有字节本身算数;结果里的 0d 0a 也只会显示成一个换行。
输入的内容会上传吗
不会。转换在浏览器里完成,不发任何请求,也不保存。