15

正是这样:字符串长度是否等于字节大小?对语言有影响吗?

我想是的,但我只是想确定一下。

附加信息:我只是想知道。我的具体情况是 PHP 和 MySQL。

答案是否定的,这就是我所需要知道的。

4

6 回答 6

49

没有。以零结尾的字符串有一个额外的字节。帕斯卡字符串(Delphi 短字符串)有一个额外的字节作为长度。并且 unicode 字符串每个字符有一个以上的字节。

通过 unicode,它取决于编码。每个字符可以是 2 或 4 个字节,甚至可以是 1,2 和 4 个字节的混合。

于 2009-01-03T20:32:40.203 回答
23

这完全取决于平台和代表。

例如,在 .NET中,每个 UTF-16 代码点的字符串占用内存中的两个字节。但是,代理对需要两个 UTF-16 值来表示 U+100000 到 U+10FFFF 范围内的完整 Unicode 字符。内存形式也有字符串长度的开销,可能还有一些填充,以及类型指针的正常对象开销等。

现在,当您从 .NET 将字符串写入磁盘(或网络等)时,您需要指定编码(大多数类默认为 UTF-8)。此时,大小很大程度上取决于编码。ASCII 总是每个字符占用一个字节,但非常有限(没有重音等);UTF-8 提供了具有可变编码的完整 Unicode 范围(所有 ASCII 字符都以单个字节表示,但其他字符占用更多)。UTF-32 总是为任何 Unicode 字符使用 4 个字节——这个列表还在继续。

如您所见,这不是一个简单的话题。要确定一个字符串将占用多少空间,您需要准确指定情况 - 它是否是某个平台上的内存中的对象(如果是,哪个平台 - 甚至可能细化到实现和操作系统设置),或者它是否是原始编码形式(例如文本文件),如果是,则使用哪种编码。

于 2009-01-03T20:40:08.643 回答
6

这取决于您所说的“长度”是什么意思。如果您的意思是“字符数”,那么,不,许多语言/编码方法每个字符使用多个字节。

于 2009-01-03T20:32:51.310 回答
3

并非总是如此,这取决于编码。

于 2009-01-03T20:32:48.003 回答
3

没有单一的答案;它取决于语言实现(请记住,有些语言有多种实现!)

以零结尾的 ASCII 字符串至少比字符串的“内容”多一个字节。(可能会分配更多,具体取决于字符串的创建方式。)

非零终止字符串使用描述符(或类似结构)来记录长度,这会在某处占用额外的内存。

Unicode 字符串(在各种语言中)每个字符使用两个字节。

对象存储中的字符串可以通过句柄引用,这增加了一层间接(和更多数据)以简化内存管理。

于 2009-01-03T20:45:56.667 回答
2

你是对的。如果编码为 ASCII,则每个字符有一个字节。否则,它是每个字符一个或多个字节。

特别是,重要的是要知道这如何影响子字符串操作。如果每个字符没有一个字节,s[n] 会得到第 n 个字节还是第 n 个字符?对于较大的 n 而不是常量,获取第 n 个字符效率低下,因为每个字符一个字节。

于 2009-01-03T20:47:00.143 回答