C#sbyte作为无符号字节写入文件

C#sbyte作为无符号字节写入文件,c#,C#,使用BinaryWriter我将sbyte变量写入文件,但它会以未签名和未签名的形式写入文件 sbyte a = (sbyte)image.pixelData[i + 0]; bw.Write(a); 例如,上述代码写入的值范围从0x00到0xFF。(这些是我在十六进制编辑器中看到的值。)您演示了对数据如何存储在内存、文件等中的基本误解 所有计算机数据都是二进制格式。 不同的数据类型决定了如何处理数据、如何执行计算、如何格式化值等 如果您将签名值写入文件,它总是使用二进制格式(计算机唯一能理解

使用
BinaryWriter
我将
sbyte
变量写入文件,但它会以未签名和未签名的形式写入文件

sbyte a = (sbyte)image.pixelData[i + 0];
bw.Write(a);

例如,上述代码写入的值范围从
0x00
0xFF
。(这些是我在十六进制编辑器中看到的值。)

您演示了对数据如何存储在内存、文件等中的基本误解

所有计算机数据都是二进制格式。

不同的数据类型决定了如何处理数据、如何执行计算、如何格式化值等

如果您将签名值写入文件,它总是使用二进制格式(计算机唯一能理解的格式)写入。如果您使用十六进制编辑器读取数据,那么十六进制编辑器将使用其认为合适的任何转换来转换数据

如果将数据作为有符号字节写入文件,然后将该数据作为有符号字节读回,则数据将与写入的数据相同。你不应该期望更多,也不应该期望更少


(注意:如果您使用我编写的十六进制编辑器(),您可以使用任何数据类型检查数据。在这种情况下,您可以让它以您期望的格式显示。否则,十六进制编辑器将其转换为十六进制或其他任何形式,这不会告诉您数据如何存储在文件中。)

如何写入?你是怎么读的?一些代码…告诉我们你是如何得出这个结论的。(注意:所有值都作为二进制位写入文件。)sbyte a=(sbyte)image.pixelData[i+0];bw.写(a);书面数据的值在0-255之间,而不是-127到127之间。我用十六进制编辑法查看了它。我认为如果你将你的评论编辑成这个问题,应该重新打开,因为现在根本不清楚你在问什么。其他人可能会在某个时候经历同样的误解,并从这个问题中得到帮助。