在LINQ中,c#decimal to hex&hex to decimal/hex to ascii

Clu*_*Clu 2 c# linq hex decimal

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

十进制到十六进制,十进制到Ascii,十六进制到十进制,十六进制到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()));
Run Code Online (Sandbox Code Playgroud)

谢谢大家.

Jef*_*ado 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");
Run Code Online (Sandbox Code Playgroud)

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

var inDecimal = "12345";
var asInt = Int32.Parse(inDecimal);
var asHex = asInt.ToString("x");
Run Code Online (Sandbox Code Playgroud)

您可以使用上述构建块通过一些LINQ完成"ASCII到(hexa)十进制"转换.假设您的意思是每个字符的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!"
Run Code Online (Sandbox Code Playgroud)