C# 如何在c中将包含十六进制内容的字节数组转换为包含十进制内容的字符串#
语言:C# 基本上我有一个包含十六进制内容的字节数组 我想把它转换成字符串,十六进制的内容也应该转换成十进制的内容 我的最后一个字符串应该包含初始字节数组中包含的十六进制值的等效十进制值 我使用 System.Text.Encoding.GetEncoding(1251).GetString 但是如何将十六进制转换成十进制呢? 即使我们可以分多个步骤来做,这也不是问题 对不起,我有一些愚蠢的疑问,请原谅C# 如何在c中将包含十六进制内容的字节数组转换为包含十进制内容的字符串#,c#,C#,语言:C# 基本上我有一个包含十六进制内容的字节数组 我想把它转换成字符串,十六进制的内容也应该转换成十进制的内容 我的最后一个字符串应该包含初始字节数组中包含的十六进制值的等效十进制值 我使用 System.Text.Encoding.GetEncoding(1251).GetString 但是如何将十六进制转换成十进制呢? 即使我们可以分多个步骤来做,这也不是问题 对不起,我有一些愚蠢的疑问,请原谅 提前谢谢 你的意思还不完全清楚 字节数组只包含字节值——它们只是数字。换言之: byte x
提前谢谢 你的意思还不完全清楚 字节数组只包含字节值——它们只是数字。换言之:
byte x = 0x20;
byte y = 32;
完全相同-它们都只是将值设置为32
现在,如果要将字节数组转换为数字,请查看及其方法,如。这将把字节数组转换成一个数字(在这种特殊情况下是一个int
)——然后您只需调用该数字上的ToString()
,就可以得到一个十进制表示形式的字符串
原始数据有多少字节?这将是决定调用哪个
位转换器
方法的关键因素。您还需要知道数据的尾端性-如果“正常”中的BitConverter
;如果您的数据真的是big-endian,您可能会对my中的EndianBitConverter
类感兴趣。我有点不确定您想做什么。您是否正在尝试创建一个以逗号分隔的十进制数字字符串-例如:
byte[] hexValues = { 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF };
string decimalValuesAsStringList = string.Join(",", hexValues.Select(i => i.ToString()).ToArray());
…或者像这样:
char[] hexCharacters = { '9', 'A', 'B', 'C', 'D', 'E', 'F' };
byte[] hexValues = hexCharacters.Select(c => Convert.ToByte(c)).ToArray();
string decimalValuesAsStringList = string.Join(",", hexValues.Select(i => Convert.ToInt32(((char)i).ToString(), 16).ToString()).ToArray());
如果数组中确实包含数字的十六进制表示形式的字符代码,则不必费心解码。由于这些字符的字符代码在所有常规编码中都是相同的,因此您可以将字节强制转换为字符 我编写了一个扩展,将字符流解析为字节流:
static class Hex {
public static IEnumerable<byte> ParseHex(this IEnumerable<char> chars) {
int buffer = 0;
bool first = true;
foreach (char c in chars) {
int b = (c - '0') % 32;
if (b > 9) b -= 7;
if (first) {
buffer |= b << 4;
} else {
yield return (byte)(buffer | b);
buffer = 0;
}
first = !first;
}
if (!first) {
yield return (byte)buffer;
}
}
}
静态类十六进制{
公共静态IEnumerable ParseHex(此IEnumerable字符){
int缓冲区=0;
bool first=true;
foreach(字符中的字符c){
int b=(c-'0')%32;
如果(b>9)b-=7;
如果(第一){
buffer |=b您能举个例子吗?转换为十进制意味着{0x1,0x0,0x3}会变成字符串“1,0,3”或“259”或“719”吗?
byte[] data = { 48, 70, 51, 67, 70, 56, 48, 55, 57, 49 };
string result = string.Join(",",
data.Cast<char>().ParseHex().Select(b => b.ToString()).ToArray()
);