c # десятичное в шестнадцатеричное и шестнадцатеричное в десятичное / шестнадцатеричное в ascii в LINQ - PullRequest
2 голосов
/ 17 октября 2011

Я пытаюсь сделать какое-то преобразование и хотел бы использовать Linq для достижения следующего,

Десятичное в шестнадцатеричное, Десятичный в аськи, От шестнадцатеричного до десятичного, Hex to 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 ]

7 голосов
/ 17 октября 2011

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 каждого символа:

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!"
2 голосов
/ 17 октября 2011

Преобразовать числовое значение в шестнадцатеричное очень просто.

Decimal d = 10M;
d.ToString("X")

Я, однако, совершенно сбит с толку тем, что вы имеете в виду, что означает "десятичная к аськи"

2 голосов
/ 17 октября 2011

Я не совсем понимаю, зачем вам здесь нужно использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...