【问题标题】:c# Read Binary data onto a stringc# 将二进制数据读入字符串
【发布时间】:2011-05-07 16:44:03
【问题描述】:

我已经看到很多关于如何将字节数组转换为字符串的示例,但是当我开始使用加密时,这给我带来了很多问题。只是出于好奇,有没有人知道将二进制数据直接读取到字符串上的方法。

执行此操作的 VB6 方法是:

Dim S as string
s = space$(lof(1))
Get #1,, s
close #1

如果不是,我已经看到了将字符串转换为字节数组的不同方法,包括 base64、UTF8 在内的字符串,最后 - 逐个字符地处理并将其转换为字节。

我的目标很简单。我想将二进制数据检索到一个字符串上,加密这个字符串,最后将所有字符串数据写回到一个新的二进制文件中。

您认为哪种方法最快?

【问题讨论】:

  • 二进制数据是如何加密的?

标签: c# string binary byte


【解决方案1】:

如果您只是想加密二进制数据,那么您应该完全避免使用字符串。如果您正在加密属于字符串的文本信息,那么您应该关心编码(UTF-8 和朋友) - 尽管读取数据,将其放入字符串,加密字符串然后写出数据似乎是一个奇怪的要求。

【讨论】:

  • 我需要数据为字符串格式,以便我可以将数据添加到原始数据的末尾。除非有某种方法可以在不先转换为字符串的情况下做到这一点?
  • 如果您需要附加到现有字节集合的末尾,请查看 System.IO.MemoryStream。
  • 我最终创建了自己的函数:我只是逐个字节地检查并从 byte > char > string 转换。
【解决方案2】:

您声明要从byte[]stringbyte[];首先,请注意 Encoding(例如 UTF-8)不是一个选项;这仅适用于将字符串转换为二进制返回字符串的情况。区别很重要:它实际上需要是文本数据才能工作,并且任意byte[] 不能被视为文本数据。出于类似的原因(不限于:代理等),这也排除了您的“直接写入字符串”。

将二进制编码为字符串的正确方法是使用 base-64、base-16 等; base-64 是这里最有效的通用编码。

但是;大多数加密代码适用于二进制,而不是文本。如果你有一个文本加密 API,在大多数情况下,它要做的第一件事就是使用 UTF-8 等编码将其转换为二进制。

所以:请检查您是否缺少直接二进制 API 选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2016-01-15
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多