Предположим, что у меня есть эта строка
string str = "1234"
Мне нужна функция, которая преобразует эту строку в эту строку:
"0x31 0x32 0x33 0x34"
Я искал в Интернете и нашел много подобных вещей, но не ответил на этот вопрос.
Предположим, что у меня есть эта строка
string str = "1234"
Мне нужна функция, которая преобразует эту строку в эту строку:
"0x31 0x32 0x33 0x34"
Я искал в Интернете и нашел много подобных вещей, но не ответил на этот вопрос.
string str = "1234";
char[] charValues = str.ToCharArray();
string hexOutput="";
foreach (char _eachChar in charValues )
{
// Get the integral value of the character.
int value = Convert.ToInt32(_eachChar);
// Convert the decimal value to a hexadecimal value in string form.
hexOutput += String.Format("{0:X}", value);
// to make output as your eg
// hexOutput +=" "+ String.Format("{0:X}", value);
}
//here is the HEX hexOutput
//use hexOutput
Кажется, это задание для метода расширения
void Main()
{
string test = "ABCD1234";
string result = test.ToHex();
}
public static class StringExtensions
{
public static string ToHex(this string input)
{
StringBuilder sb = new StringBuilder();
foreach(char c in input)
sb.AppendFormat("0x{0:X2} ", (int)c);
return sb.ToString().Trim();
}
}
Несколько советов.
Не используйте конкатенацию строк. Строки неизменяемы, и поэтому каждый раз, когда вы объединяете строку, создается новая. (Давление на использование памяти и фрагментацию). StringBuilder обычно более эффективен для этого случая.
Строки - это массив символов, и использование foreach в строке уже дает доступ к массиву символов
Эти общие коды хорошо подходят для метода расширения, включенного в полезную библиотеку, всегда доступную для ваших проектов (повторное использование кода)
static void Main(string[] args)
{
string str = "1234";
char[] array = str.ToCharArray();
string final = "";
foreach (var i in array)
{
string hex = String.Format("{0:X}", Convert.ToInt32(i));
final += hex.Insert(0, "0X") + " ";
}
final = final.TrimEnd();
Console.WriteLine(final);
}
Выход будет:
0X31 0X32 0X33 0X34
Вот DEMO
.
Преобразовать в байтовый массив, а затем в hex
string data = "1234";
// Convert to byte array
byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);
// Convert to hex and add "0x"
data = "0x" + BitConverter.ToString(retval).Replace("-", " 0x");
System.Diagnostics.Debug.WriteLine(data);
[TestMethod]
public void ToHex()
{
string str = "1234A";
var result = str.Select(s => string.Format("0x{0:X2}", ((byte)s)));
foreach (var item in result)
{
Debug.WriteLine(item);
}
}
Это тот, который я использовал:
private static string ConvertToHex(byte[] bytes)
{
var builder = new StringBuilder();
var hexCharacters = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
for (var i = 0; i < bytes.Length; i++)
{
int firstValue = (bytes[i] >> 4) & 0x0F;
int secondValue = bytes[i] & 0x0F;
char firstCharacter = hexCharacters[firstValue];
char secondCharacter = hexCharacters[secondValue];
builder.Append("0x");
builder.Append(firstCharacter);
builder.Append(secondCharacter);
builder.Append(' ');
}
return builder.ToString().Trim(' ');
}
И затем используется как:
string test = "1234";
ConvertToHex(Encoding.UTF8.GetBytes(test));
string data = richTextBox1.Text;
// Convert to byte array
byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);
// Convert to hex and add "0x"
data = "0x" + BitConverter.ToString(retval).Replace("-", " 0x");
richTextBox1.Text = data;
Если вы хотите изменить '0x' или полностью удалить интервал, просто отредактируйте или удалите это:
data = "0x" + BitConverter.ToString(retval).Replace("-", " 0x");
Это будет работать практически с чем угодно (от кнопок до меню).