Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c-在字符串中使用二进制数据时数据是否“丢失”?_C#_String - Fatal编程技术网

C# c-在字符串中使用二进制数据时数据是否“丢失”?

C# c-在字符串中使用二进制数据时数据是否“丢失”?,c#,string,C#,String,我尝试使用StreamReader类的ReadToEnd方法读取JPG文件,该方法返回字符串 但由于某种原因,当我将这个字符串写入文件时,它不会打开 将数据读入字符串时是否丢失了某些内容?您不能这样做。。。。改用文件流 你不能用字符串来读取二进制文件,据我所知,有些字符无法读取。你就是不能用这种方式读取。。。。改用文件流 您不能使用字符串来读取二进制文件,据我所知,有些字符无法读取。字符串是为保存unicode字符而设计的;不是二进制的。对于二进制,使用字节[]或流。或图像等进行更专业的图像处理

我尝试使用StreamReader类的ReadToEnd方法读取JPG文件,该方法返回字符串

但由于某种原因,当我将这个字符串写入文件时,它不会打开


将数据读入字符串时是否丢失了某些内容?

您不能这样做。。。。改用文件流


你不能用字符串来读取二进制文件,据我所知,有些字符无法读取。

你就是不能用这种方式读取。。。。改用文件流


您不能使用字符串来读取二进制文件,据我所知,有些字符无法读取。

字符串是为保存unicode字符而设计的;不是二进制的。对于二进制,使用字节[]或流。或图像等进行更专业的图像处理


尽管名称不同,StreamReader实际上是一个专门的文本阅读器-即,它是一个从流中读取的文本阅读器。图像不是文本,因此这不是正确的选项。

字符串用于保存unicode字符;不是二进制的。对于二进制,使用字节[]或流。或图像等进行更专业的图像处理


尽管名称不同,StreamReader实际上是一个专门的文本阅读器-即,它是一个从流中读取的文本阅读器。图像不是文本,因此这不是正确的选项。

不幸的是,System.IO命名空间中的类名存在严重问题。StreamReader设计用于读取\写入\文本文件。您应该使用FileStream作为@goodness建议的二进制文件

不幸的是,System.IO命名空间中的类名存在严重问题。StreamReader设计用于读取\写入\文本文件。您应该将FileStream用于二进制文件,因为@goodwill建议

字符串用于文本数据。它们不适用于二进制数据-如果您以这种方式使用它们,您将丢失数据。如果您幸运的话,您可以使用一些不会丢失数据的编码,但有些微妙的问题仍然使它成为一个非常糟糕的主意

如果您实际处理的是一个文件,那么读取整个文件的最简单方法就是调用。如果必须处理任意流,请查看。

字符串用于文本数据。它们不适用于二进制数据-如果您以这种方式使用它们,您将丢失数据。如果您幸运的话,您可以使用一些不会丢失数据的编码,但有些微妙的问题仍然使它成为一个非常糟糕的主意


如果您实际处理的是一个文件,那么读取整个文件的最简单方法就是调用。如果必须处理任意流,请查看。

字符串用于表示文本。他们擅长表现文本。事实上,非常好,因为它们支持Unicode并保护您免受各种典型字符串处理错误的影响

它们不擅长表示二进制数据,因为它们不是为二进制数据而设计的。正如您所提到的,字节数组在这方面要好得多


这不是一个比另一个更好的问题,这只是为了达到目的和理解何时选择一个或另一个。Text=字符串,binary=字节数组或流。

字符串用于表示文本。他们擅长表现文本。事实上,非常好,因为它们支持Unicode并保护您免受各种典型字符串处理错误的影响

它们不擅长表示二进制数据,因为它们不是为二进制数据而设计的。正如您所提到的,字节数组在这方面要好得多


这不是一个比另一个更好的问题,这只是为了达到目的和理解何时选择一个或另一个。Text=字符串,binary=字节数组或流。

所有真正的程序员都知道,唯一有用的数据结构是数组。字符串、列表、结构、集合——这些都是数组的特殊情况,可以用同样简单的方法处理,而不会给编程语言带来各种各样的麻烦。关于奇特的数据类型,最糟糕的是您必须声明它们,而我们都知道,真正的编程语言具有基于六个字符变量名的第一个字母的隐式类型

此外,真正有决心的程序员可以用任何语言编写Fortran程序


不管是谁修改了这一点,他显然要么没有幽默感,要么对民间传说一无所知。以上内容摘自泰克公司Ed Post于1983年写给Datamation编辑的一封非常著名的信。这封信的标题是。

所有真正的程序员都知道,唯一有用的数据结构是数组。字符串、列表、结构、集合——这些都是数组的特殊情况,可以用同样简单的方法处理,而不会给编程语言带来各种各样的麻烦。关于奇特的数据类型,最糟糕的是您必须声明它们,而我们都知道,真正的编程语言具有基于六个字符变量名的第一个字母的隐式类型

此外,真正有决心的程序员可以用任何语言编写Fortran程序


不管是谁修改了这一点,他显然要么没有幽默感,要么对民间传说一无所知。以上内容摘自泰克公司Ed Post于1983年写给Datamation编辑的一封非常著名的信。这封信的标题是。

请记住,文本数据是二进制数据,但二进制数据不是文本数据。

请记住,文本数据是二进制数据,但二进制数据不是文本数据。

我注意到没有人回答实际问题

将数据读入字符串时是否丢失了某些内容? JPEG文件包含图片而不是文字。这个双字符有一个字节序列的二进制表示。其中一些字节的值0x00也表示为NUL。在字符串中,包含此值的字节被解释为标记字符串的结尾。超过字符串结尾的数据被视为未使用的缓冲区,并被忽略

将字符串写入文件时,不包括超过第一个NUL的内容。因此,该文件不是完整的二进制图像,并且被试图将其解释为JPEG的软件的验证逻辑拒绝

因此,当加载包含非文本数据的字符串时,数据通常会丢失。这里的问题是,您实际上进行了无效的类型转换,但编译器和运行时都没有阻止您,结果是数据损坏

它到底有什么好处? 有几件事。正如其他人所说,字符串被设计为包含文本。在.NET中,字符串支持除普通旧ASCII之外的编码。还有对文本操作的广泛支持。请在“帮助”中查找格式说明符,以了解字符串操作的精彩示例

为什么C字符串使用NUL作为字符串的结尾?
这是遗留下来的东西。NUL对于其他任何东西都没有多大用处,这样做可以简化托管代码中字符串的编组。BSTR出于同样的原因做同样的事情。

我注意到没有人回答实际的问题

将数据读入字符串时是否丢失了某些内容? JPEG文件包含图片而不是文字。这个双字符有一个字节序列的二进制表示。其中一些字节的值0x00也表示为NUL。在字符串中,包含此值的字节被解释为标记字符串的结尾。超过字符串结尾的数据被视为未使用的缓冲区,并被忽略

将字符串写入文件时,不包括超过第一个NUL的内容。因此,该文件不是完整的二进制图像,并且被试图将其解释为JPEG的软件的验证逻辑拒绝

因此,当加载包含非文本数据的字符串时,数据通常会丢失。这里的问题是,您实际上进行了无效的类型转换,但编译器和运行时都没有阻止您,结果是数据损坏

它到底有什么好处? 有几件事。正如其他人所说,字符串被设计为包含文本。在.NET中,字符串支持除普通旧ASCII之外的编码。还有对文本操作的广泛支持。请在“帮助”中查找格式说明符,以了解字符串操作的精彩示例

为什么C字符串使用NUL作为字符串的结尾?
这是遗留下来的东西。NUL对于其他任何东西都没有多大用处,这样做可以简化托管代码中字符串的编组。BSTR出于同样的原因做同样的事情。

字符串默认使用Unicode编码,Unicode使用NUL字符作为控制字符,双NUL用于终止,单NUL用于表示前面的ASCII字符


因此,二进制数据不能加载到字符串中。

字符串默认使用Unicode编码,Unicode使用NUL字符作为控制字符,双NUL用于终止,单NUL用于表示前面的ASCII字符


正是由于这个原因,二进制数据无法加载到字符串中。

我意识到在C/C++中,NUL字符0x00是字符串的结尾。然而,在.Net中,字符串是更复杂的对象。除了具体的实现细节之外,字符串不能包含NUL字符有什么原因吗?我意识到在C/C++中NUL字符0x00是字符串的结尾。然而,在.Net中,字符串是更复杂的对象。除了具体的实现细节外,字符串不能包含NUL字符还有什么原因吗。