c# - 用于处理字节的无编码字符串类? (或替代方法)

标签 c# .net boo

我有一个从 Python 2 转换而来的应用程序(其中字符串本质上是字节列表),我使用字符串作为方便的字节缓冲区。

我正在用 Boo 语言(类似 Python 的语法,在 .NET 上运行)重写部分代码,发现字符串具有固有编码类型,例如 ASCII、UTF-8 等。大部分处理字节的信息指的是字节数组,它们(显然)是固定长度的,这使得它们很难使用。

我显然可以从字符串中获取字节,但存在将某些字符扩展为多个字节或丢弃/更改超过 127 字节等的风险。这很好,我完全理解这样做的原因 - 但会是什么对我来说方便的是 (a) 一种保证不转换或丢弃字符的编码,以便我可以将字符串用作方便的字节缓冲区,或者 (b) 某种提供字符串类便利性的 ByteString 类。 (理想情况下是后者,因为它看起来不那么骇人听闻。)这些中的任何一个是否已经存在? (或者实现起来微不足道?)

我知道 System.IO.MemoryStream,但是每次创建其中一个然后必须在最后创建一个 System.IO.StreamReader 才能访问 ReadToEnd() 的前景似乎不太好高效,这是对性能敏感的代码。

(我希望没有人介意我将其标记为 C#,因为我觉得答案可能也适用于此,并且 C# 用户可能对可能的解决方案有很好的了解。)

编辑:我也刚刚发现了 System.Text.StringBuilder - 再一次,字节有这样的东西吗?

最佳答案

Use the Latin-1 encoding as described in this answer .它映射 128-255 范围内的值不变,当您想要将字节往返到字符时很有用。

更新

或者如果你想直接操作字节,使用List<byte> :

List<byte> result = ...
...
// Add a byte at the end
result.Add(b);
// Add a collection of bytes at the end
byte[] bytesToAppend = ...
result.AddRange(bytesToAppend);
// Insert a collection of bytes at any position
byte[] bytesToInsert = ...
int insertIndex = ...
result.InsertRange(insertIndex, bytesToInsert);
// Remove a range of bytes
result.RemoveRange(index, count);
... etc ...

I've also just discovered System.Text.StringBuilder - again, is there such a thing for bytes?

StringBuilder类是必需的,因为常规字符串是不可变的,并且 List<byte>为您提供“用于字节的 StringBuilder”所期望的一切。

关于c# - 用于处理字节的无编码字符串类? (或替代方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746896/

相关文章:

.net - 在处理单个页面时,ViewState 是维护状态的比 QueryString 更好的选择。为什么?

用于类型提示与 Boo 的 Python3 函数注释

boo - 在 boo 中的新行上链接方法

html - 当宽度为 0 时在进度条中显示文本

c# - c# 中的 Equals 是按引用还是按值进行比较?

c# - 使用 react 性扩展每秒按顺序获取下一个事件

c# - 如何在 .NET 中叠加图像

javascript - 将 jquery 模态弹出脚本附加到按钮事件

c# - 引用对象的地址在立即窗口中有效,但在编译代码中无效

c# - 使用 .NET 反射自克隆可执行文件