У меня есть строка типа "sample". Я хочу получить строку в hex формате; например:Преобразование строки в шестнадцатеричную строку в C#
"796173767265"
Пожалуйста, дайте синтаксис C#.
У меня есть строка типа "sample". Я хочу получить строку в hex формате; например:Преобразование строки в шестнадцатеричную строку в C#
"796173767265"
Пожалуйста, дайте синтаксис C#.
Сначала вам нужно, чтобы получить его в byte[]
, так что это:
byte[] ba = Encoding.Default.GetBytes("sample");
, а затем вы можете получить строку:
var hexString = BitConverter.ToString(ba);
сейчас, что собирается возвращать строку с тире (-
) в нем, так что вы можете просто использовать это:
hexString = hexString.Replace("-", "");
, чтобы получить избавиться от них, если хотите.
ПРИМЕЧАНИЕ: вы могли бы использовать другой Encoding
, если вам нужно.
Использование кодировки по умолчанию может потерпеть неудачу в любом случае? Например, работаете в разных версиях Windows? – jacktric
@jacktric, если вы знаете кодировку, вы всегда должны использовать конкретную кодировку. Тем не менее, я использую кодировку 'Default' более десятилетия и не имею проблем в производстве по географическим местам или версиям Windows. –
var result = string.Join("", input.Select(c => ((int)c).ToString("X2")));
ИЛИ
var result =string.Join("",
input.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))));
В соответствии с этим фрагментом here, этот подход должен быть хорош для длинных строк:
private string StringToHex(string hexstring)
{
StringBuilder sb = new StringBuilder();
foreach (char t in hexstring)
{
//Note: X for upper, x for lower case letters
sb.Append(Convert.ToInt32(t).ToString("x"));
}
return sb.ToString();
}
использование:
string result = StringToHex("Hello world"); //returns "48656c6c6f20776f726c64"
Другой подход в одной строке
string input = "Hello world";
string result = String.Concat(input.Select(x => ((int)x).ToString("x")));
Для поддержки Unicode:
public class HexadecimalEncoding
{
public static string ToHexString(string str)
{
var sb = new StringBuilder();
var bytes = Encoding.Unicode.GetBytes(str);
foreach (var t in bytes)
{
sb.Append(t.ToString("X2"));
}
return sb.ToString(); // returns: "48656C6C6F20776F726C64" for "Hello world"
}
public static string FromHexString(string hexString)
{
var bytes = new byte[hexString.Length/2];
for (var i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return Encoding.Unicode.GetString(bytes); // returns: "Hello world" for "48656C6C6F20776F726C64"
}
}
Лучше использовать два 'Extension Method's для этого – pylover
несколько Unicode альтернативы
var s = "0";
var s1 = s.Aggregate("", (h, c) => h + ((int)c).ToString("x4")); // left padded with 0 "0030d835dfcfd835dfdad835dfe5d835dff0d835dffb"
var s2 = s.Aggregate("", (h, c) => h + string.Format("{0,4:x}", (int)c)); // left padded with space " 30d835dfcfd835dfdad835dfe5d835dff0d835dffb"
var sL = BitConverter.ToString(Encoding.Unicode.GetBytes(s)).Replace("-", ""); // Little Endian "300035D8CFDF35D8DADF35D8E5DF35D8F0DF35D8FBDF"
var sB = BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(s)).Replace("-", ""); // Big Endian "0030D835DFCFD835DFDAD835DFE5D835DFF0D835DFFB"
// no encodding "300035D8CFDF35D8DADF35D8E5DF35D8F0DF35D8FBDF"
byte[] b = new byte[s.Length * sizeof(char)];
Buffer.BlockCopy(s.ToCharArray(), 0, b, 0, b.Length);
var sb = BitConverter.ToString(b).Replace("-", "");
Какой формат шестигранной вы говорите? ASCII? (Пример, который вы даете, не ASCII для «sample», это ссылочный адрес?) Маленький конечный или большой? Какой размер? – jpaugh