c#decimal to hex& LINQ中的十六进制到十进制/十六进制到ascii

时间:2011-10-17 17:43:24

标签: c# linq hex decimal

我正在尝试进行一些转换,并希望使用Linq来实现以下目标,

十进制到十六进制, 十进制到Ascii, 十六进制到十进制, Hex到Ascii

有人可以告诉我如何在Linq中有效地做到这一点吗? 我将把输出显示在文本框中。

另外,我还需要包含前缀和分隔符字段,

示例:

string input = txtAscii.Text;
string delim = txtDelimiter.Text;
string prefix = txtPrefix.Text;
if (checkBox1.Checked == true && string.IsNullOrEmpty(delim)) delim = " ";
//Linq, Ascii to Decimal.    
txtDecimal.Text = string.Join(delim, input.Select(c => prefix + ((int)c).ToString()));

谢谢大家。

3 个答案:

答案 0 :(得分:7)

LINQ用于查询集合,而不是转换值。说你想用LINQ将X转换为Y是错误的。

那就是说,这是你需要的构建块:

// string in decimal form to int
Int32.Parse("12345");

// string in hexadecimal form to int
Int32.Parse("ABCDE", NumberStyles.HexNumber);

// int to string in decimal form
12345.ToString();

// int to string in hexadecimal form
12345.ToString("x");

然后做一些事情,比如在十进制格式到十六进制格式之间转换:

var inDecimal = "12345";
var asInt = Int32.Parse(inDecimal);
var asHex = asInt.ToString("x");

您的“ASCII到(hexa)十进制”转换可以使用上面的构建块使用一点LINQ来完成。假设你的意思是每个字符的ASCII代码的(hexa)十进制表示:

var str = "FOOBAR!";
var asAsciiInt = String.Join(" ", str.Select(c => (int)c));
var asAsciiHex = String.Join(" ", str.Select(c => ((int)c).ToString("x2")));
// asAsciiInt == "70 79 79 66 65 82 33"
// asAsciiHex == "46 4f 4f 42 41 52 21"

var asciiInt = "70 79 79 66 65 82 33";
var charStrs = asciiInt.Split();
var asStr = String.Concat(charStrs.Select(cs => (char)Int32.Parse(cs)));
// asStr == "FOOBAR!"

var asciiHex = "46 4f 4f 42 41 52 21";
var charStrs = asciiHex.Split();
var asStr = String.Concat(charStrs.Select(cs => (char)Int32.Parse(cs, NumberStyles.HexNumber)));
// asStr == "FOOBAR!"

答案 1 :(得分:2)

我真的不明白为什么你需要在这里使用LINQ,但你可以像这样在十进制和十六进制之间进行转换:

decimal dec1 = 182;

//convert decimal as a hex in a string variable
string hex = dec.ToString("X");

//convert the hex string back to the decimal
decimal dec2 = decimal.Parse(hex, System.Globalization.NumberStyles.HexNumber);

答案 2 :(得分:2)

将数值转换为十六进制很容易。

Decimal d = 10M;
d.ToString("X")
然而,我对你所说的“十进制到ascii”

完全感到困惑