某些编程语言支持字符串,它们存储为以下字符串:
例如,Delphi中的AnsiString类型。这些字符串可以方便地管理,人们可以认为,将它们用作二进制数据的容器是个好主意,因为在连接,子字符串提取等方面有一些有效的操作。
我有一种强烈的感觉,使用字符串类型,即使它是二进制安全的,用于存储二进制数据在意识形态上是错误的,但我找不到任何强有力的论据来保护这个位置。
当然,在PHP这样的语言中,使用数组实际上会增加太多开销(由于数组的散列特性,PHP中的每个数组成员占用大约50个字节的内存)除了使用字符串作为二进制数据之外别无选择容器。但至于Delphi或C ++(使用它的std :: string)我认为将二进制数据存储在字符串中(例如,密码加密密钥或任何二进制协议缓冲区)是错误的,即使你有技术可能性也是如此。
你怎么看?是否有任何反对在字符串中存储二进制数据的论据?答案 0 :(得分:2)
字符串旨在处理文本而不是二进制数据。因此,某些字符串实现可能需要一定的自由,并且不会在您输入数据时存储数据(例如,unicode转换)。
编辑: 为了澄清,上面的评论,我没有谈论任何特定的语言,但事实上某些字符串实现(在字符串不只是char数组的语言)内部存储数据不同,所以甚至如果从字节数组创建字符串,则在内部可以将其保存为双字节数组。此外,在许多语言中,字符串是不可变的,在处理原始数据时通常不是您想要的。
在任何情况下,我都不会想到任何具有良好字符串实现但没有矢量实现的语言。为什么不把它用作容器?
编辑: 没错,大多数语言都不允许你覆盖数组/向量的运算符,并且有充分的理由(但这是另一个讨论)。但除此之外,你应该拥有你需要的一切,即使它的语法糖含量稍低。
答案 1 :(得分:1)
取决于语言。如果它允许你用一个字符串做所有事情,比如说,用一个整数,为什么不把它存储在一个int中呢?否则,为了连接和其他所有工具,它可能看起来和感觉不对,但字符串可能是唯一的选择。