【问题标题】:Bit Conversion trying to write into a stream位转换试图写入流
【发布时间】:2012-09-07 19:10:14
【问题描述】:

我有一个代表二进制数的字符串:“1010”,它代表十进制的 10(十)。

我需要将此字符串写入 Stream 但保持二进制格式。当您通常要编写一个字符串时,.Net 会将其保存,将当前字符串转换为字节数组,然后将这些字节放入字符串中,我不希望这样,因为我想要包含我的流的字节是我以字符串“1010”为例。

我是怎么做到的???

【问题讨论】:

  • 如果您希望您的流包含 1010 模式,您可以简单地写出 new byte[] {1, 0, 1, 0}
  • 这不起作用,因为当我只想写 1 个字节时它会将 4 个字节写入硬盘
  • 问题是 4 个 int 被放入了 byte[] 每个有 1 个字节

标签: c# .net formatting binary-data


【解决方案1】:

如果“1010”是字符串,您仍然可以将其写入流并保留格式,前提是接收端使用正确的编码。当然,您可以使用StreamWriter 并将字符串写为字符串。

更新

好的,所以您的 cmets 似乎稍微澄清了您的问题。因此,您似乎想将 base-2 字符串转换为一个字节,这样您就不会存储多个字节以在文本中表示您可以在单个字节中表示的内容。这公平吗?如果是这样,请使用Convert.ToByte(String, Int32),并指定2 作为基础。然后你有一个对应于你的字符串的字节,你可以把它写出来。

【讨论】:

  • 不,因为它会将字符串转换为字节并写入这些字节。我只是不想那样。我希望我的流中的数组位与字符串包含的相同
  • 但它是一样的。无论如何,一切基本上都是幕后的字节,即使是你看到的字符串。每当您写入或读取流时,您都是在写入或读取字节。您可能有一个更高级别的 API 来抽象字节并让您使用更复杂的类型,但它始终是字节。在您的情况下,您正在担心实际上不是问题的事情。打开FileStream 并写入该字符串。然后打开文件。给你。
  • 我很清楚这一点。我很担心,因为实现压缩算法并不容易,我需要访问那种东西,如果我将字符串写入流中,它会增加它的长度,错了!!这就是我需要写真实字节的原因
  • 这就是我想要的方式,但并不完全如此。好的,让我这样说:我的字符串是数据的表示形式(当然是二进制的),所以我想将该数据写入流中。如果我有字符串 x = "1010" 并将其写入流中,然后我从流中读取一个 int a 必须得到 int a = 10
  • 是的,但是您可以将字节和整数视为整数数据类型,至少就这一点而言。 byte 是 8 位整数,short 是 16 位整数,int 是 32 位整数,long 是 64 位整数。如果您将该字节写入文本文件,无论编码如何,您都可以从文件中读回它,将byte 转换为int,然后得到您要查找的内容。想一想,您可能只需将 int 变量分配给该字节的值而无需强制转换,因为它是一个较小的类型。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多