如何解决如何将字节数组中的十六进制值作为解释的 ASCII 数字转换为整数?
我刚开始接触 c# 编程 正如标题所描述的,我正在寻找一种方法将作为字节 [] 中的 ASCII 字符传递给我的数字转换为整数。我经常找到将十六进制字节转换为 ASCII 字符或字符串的方法。我还找到了另一个方向,从字符中获取十六进制字节。也许我仍然应该说我将值显示在 texbox 中以供控制。
例如:
十六进制代码:30 36 38 31
Ascii 字符串:(0) 6 8 1
整数 (dez) 应为:681
到目前为止,我已经尝试了各种方法。我也无法在 Microsoft Visual Studio 网站上找到它。其实这个应该比较简单。我很抱歉我缺少 C# 基础知识。
解决方法
将 this hex-to-string answer 和 this integer parsing answer 放在一起,我们得到以下内容:
// hex -> byte array -> string
var hexBytes = "30 36 38 31";
var bytes = hexBytes.Split(' ')
.Select(hb => Convert.ToByte(hb,16)) // converts string -> byte using base 16
.ToArray();
var asciiStr = System.Text.Encoding.ASCII.GetString(bytes);
// parse string as integer
int x = 0;
if (Int32.TryParse(asciiStr,out x))
{
Console.WriteLine(x); // write to console
}
else
{
Console.WriteLine("{0} is not a valid integer.",asciiStr); // invalid number,write error to console
}
,
该问题的典型解决方案是Linq 查询。我们应该
-
Split
初始字符串到项目中 -
Convert
每个 item 都转换为 int,将 item 视为十六进制。我们应该减去'0'
,因为我们没有数字本身,而是它的 ascii 代码。 -
Aggregate
项转化为最终整数
代码:
using System.Linq;
...
string source = "30 36 38 31";
int result = source
.Split(' ')
.Select(item => Convert.ToInt32(item,16) - '0')
.Aggregate((sum,item) => sum * 10 + item);
如果你想获得 ascii string
你可以
-
Split
字符串 -
Convert
每一项变成char
-
Join
将字符恢复为字符串:
代码:
string source = "30 36 38 31";
string asciiString = string.Join(" ",source
.Split(' ')
.Select(item => (char)Convert.ToInt32(item,16)));
,
要将包含 ASCII 代码的字节数组转换为整数:
byte[] data = {0x30,0x36,0x38,0x31};
string str = Encoding.ASCII.GetString(data);
int number = int.Parse(str);
Console.WriteLine(number); // Prints 681
要将整数转换为包含 ASCII 代码的 4 字节数组(当然仅适用于数字
int number = 681;
byte[] data = Encoding.ASCII.GetBytes(number.ToString("D4"));
// data[] now contains 30h,36h,38h,31h
Console.WriteLine(string.Join(",",data.Select(b => b.ToString("x"))));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。