一门语言在实现 String 和 Binary 两种类型时, 他们的数据结构差异性在哪里?

发布于 2022-09-02 08:51:51 字数 417 浏览 16 评论 0

string 是我们非常常用的基础数据类型,binary 也是时长用到。它们的差异性有时候让人有点摸不着头脑

  • 一个仅包含ascii字符的简单字符串:"hello",对应的十六进制编码是 68 65 6c 6c 6f,它作为 string 保存和作为 binary 保存会有差异吗?

  • 对于包含类似 UTF-8 编码的多字节字符的字符串:"你好",对应的十六进制编码是 e4 bd a0 e5 a5 bd,转化为binary时,会有字节序等影响吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月亮是我掰弯的 2022-09-09 08:51:51

字符串在软件内部的表示取决于内部实现。比如 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 是字节序相关的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文