C#转换字符串转换成它的字节[]等价
题
在这一点大多数人都会想到“啊生病后这..:”
byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);
然而..我有问题是我所需要的字节的精确值与不编码只是纯值对于每个字节。例如,如果字符串的值是(0xFF32),我希望它转换太{} 255,50。他的原因是我有一个文件格式我试图读出字节为他们节省存储廉政局和程序打开时再读取它们。
这是我到目前为止有:
...
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字符串内部存储它返回的字节数。
不过,这一切都是胡言乱语:字符串是的总是的链接到一个特定的编码和有没有办法解决它。上述将失败例如如果该文件包含无效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。