一门语言在实现 String 和 Binary 两种类型时, 他们的数据结构差异性在哪里?
string
是我们非常常用的基础数据类型,binary
也是时长用到。它们的差异性有时候让人有点摸不着头脑
一个仅包含
ascii
字符的简单字符串:"hello"
,对应的十六进制编码是68 65 6c 6c 6f
,它作为string
保存和作为binary
保存会有差异吗?对于包含类似
UTF-8
编码的多字节字符的字符串:"你好"
,对应的十六进制编码是e4 bd a0 e5 a5 bd
,转化为binary
时,会有字节序等影响吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
字符串在软件内部的表示取决于内部实现。比如 Windows NT、Java 内部使用 UTF-16LE 编码保存字符串,C(
wchar*
)使用两字节或者四字节编码,Python 2 (unicode
类型)至 3.2 依编译时选项使用两字节或者四字节编码,Python 3.3 以后依字符串内容使用单字节、两字节或者四字节编码,Go 和 Rust 使用 UTF-8 编码。MySQL 有两种字符串编码:「utf8」使用三字节编码,「utf8mb」使用四字节编码。字符串并不能直接「作为」二进制保存;你(或者你所使用的软件)必须将其进行编码。上边我已经讨论了内部在内存中的编码表示。如果要存储到文件,或者通过网络传输,需要使用者(做这件事的人)指定编码,或者采用默认编码的。
ASCII、Latin-x、UTF-8 编码是字节序无关的(前两类是单字节编码)。GB18030 和 UTF-16、UTF-32 是字节序相关的。