[英]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.