Csharp/C#教程:C#将字符串转换为其byte 等价物分享


C#将字符串转换为其byte 等价物

在这一点上,大多数人都会想“这个病了啊……”

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); 

如果你想要字节,请使用Stream!

为什么你在乱用TextReader?

编辑:

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

上述就是C#学习教程:C#将字符串转换为其byte 等价物分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1003171.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐