繁体   English   中英

C#将字符串转换为其等效的byte []

[英]C# convert string into its byte[] equivalent

在这一点上,大多数人会想到“啊,我要贴这个……”:

byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);

但是..我的问题是我需要字节的确切值,而没有编码,只是每个字节的纯值。 例如,如果字符串的值为(0xFF32),我也希望它也将其转换为{255,50}。 他这样做的原因是我尝试读取一种存储int的文件格式,因为字节将其保存,然后在程序打开时读取它们。

这是我到目前为止的内容:

...
dialog.InitialDirectory =
    Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) +
    "/Test";

dialog.Title="Open File";

if (dialog.ShowDialog(this) == DialogResult.OK)
{
    StreamReader reader = new StreamReader(dialog.FileName);
    string data = reader.ReadToEnd();
    reader.Close();
    byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data);
    File_Read(dialog.FileName,fileC);
}
...

因此,当我尝试读取文件时,它将说0xFF的文件转换为0x3F,因为0xFF大于127,而0x3F是?。

对不起,如果我看起来有点混乱:)

谢谢迈克尔

问题在于您从以下方法入手:

我需要没有编码的字节的确切值

...

例如,如果字符串的值为(0xFF32)

这有点像看一幅油画并说:“我想要该图片的字节,没有编码。” 这没有道理。 文本与二进制数据不同。 一旦了解了这一点,就很容易找到问题的根源。 您真正想要的是文件的内容作为字节数组。 这很容易,因为文件是二进制数据! 如果它不是真正的文本,则不应首先将其作为文本阅读。 幸运的是,.NET使这变得非常容易:

byte[] fileC = File.ReadAllBytes(dialog.FileName);

但是..我的问题是我需要字节的确切值,而没有编码,只是每个字节的纯值。

然后使用:

byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);

它返回.NET字符串内部存储的字节。

但是,所有这些都是codswallop:字符串始终链接到特定的编码,并且无法解决。 例如,如果文件包含无效的Unicode代码序列(可能会发生)或通过规范化,则上述操作将失败。 由于您显然不希望使用string ,因此请勿阅读。 而是将文件读取为二进制数据。

//将字符串转换为字节数组

public static byte[] StrToByteArray(string str)
{
    System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
    return encoding.GetBytes(str);
}

//将字节数组转换为字符串

public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}

使用BinaryReader

为什么要从字符串转换呢? 您不能直接将文件的内容读取为字节吗?

byte[] fileC = File.ReadAllBytes(dialog.FileName);

如果需要字节,请使用流!

到底为什么要弄乱TextReader?

编辑:

根据您的示例,您正在打开一个文件,因此只需使用FileStream。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM