Tôi có một chuỗi như "mẫu". Tôi muốn lấy một chuỗi ở định dạng số hex; như thế này:Chuyển chuỗi thành chuỗi thập lục phân trong C#
"796173767265"
Vui lòng cung cấp cú pháp C#.
Tôi có một chuỗi như "mẫu". Tôi muốn lấy một chuỗi ở định dạng số hex; như thế này:Chuyển chuỗi thành chuỗi thập lục phân trong C#
"796173767265"
Vui lòng cung cấp cú pháp C#.
Trước tiên, bạn sẽ cần phải làm cho nó vào một byte[]
, vì vậy làm điều này:
byte[] ba = Encoding.Default.GetBytes("sample");
và sau đó bạn có thể nhận được chuỗi:
var hexString = BitConverter.ToString(ba);
bây giờ, đó là sẽ trả về một chuỗi với dấu gạch ngang (-
) trong đó để bạn có thể chỉ cần sử dụng điều này:
hexString = hexString.Replace("-", "");
để nhận loại bỏ những thứ đó nếu bạn muốn.
LƯU Ý: bạn có thể sử dụng Encoding
khác nếu bạn cần.
Sử dụng Mã hóa mặc định có thể bị lỗi trong mọi trường hợp? Chạy trên các phiên bản Windows khác nhau chẳng hạn? – jacktric
@jacktric nếu bạn biết mã hóa, bạn nên luôn sử dụng mã hóa cụ thể. Tuy nhiên, tôi đã sử dụng mã hóa 'Mặc định' trong hơn một thập kỷ và không gặp vấn đề gì trong sản xuất trên các vị trí địa lý hoặc các phiên bản của Windows. –
var result = string.Join("", input.Select(c => ((int)c).ToString("X2")));
HOẶC
var result =string.Join("",
input.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))));
Theo đoạn này here, phương pháp này nên được tốt cho chuỗi dài:
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();
}
sử dụng:
string result = StringToHex("Hello world"); //returns "48656c6c6f20776f726c64"
Một cách tiếp cận trong một dòng
string input = "Hello world";
string result = String.Concat(input.Select(x => ((int)x).ToString("x")));
Để được hỗ trợ 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"
}
}
Tốt hơn nên sử dụng hai Phương pháp mở rộng 'cho – pylover
vài lựa chọn thay thế 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("-", "");
Định dạng hex bạn đang nói về? ASCII? (Ví dụ bạn đưa ra không phải là ASCII cho "mẫu", đó là một địa chỉ tham khảo?) Little endian, hoặc lớn? Cỡ nào? – jpaugh