[英]Convert string to hex-string in C#
I have a string like "sample".我有一个像“sample”这样的字符串。 I want to get a string of it in hex format ;
我想得到一个十六进制格式的字符串; like this:
像这样:
"796173767265"
Please give the C# syntax.请给出 C# 语法。
First you'll need to get it into a byte[]
, so do this:首先你需要把它变成一个
byte[]
,所以这样做:
byte[] ba = Encoding.Default.GetBytes("sample");
and then you can get the string:然后你可以得到字符串:
var hexString = BitConverter.ToString(ba);
now, that's going to return a string with dashes ( -
) in it so you can then simply use this:现在,这将返回一个带有破折号(
-
)的字符串,因此您可以简单地使用它:
hexString = hexString.Replace("-", "");
to get rid of those if you want.如果你想摆脱那些。
NOTE: you could use a different Encoding
if you needed to.注意:如果需要,您可以使用不同的
Encoding
。
In .NET 5.0 and later you can use the Convert.ToHexString()
method.在 .NET 5.0 及更高版本中,您可以使用
Convert.ToHexString()
方法。
using System;
using System.Text;
string value = "Hello world";
byte[] bytes = Encoding.UTF8.GetBytes(value);
string hexString = Convert.ToHexString(bytes);
Console.WriteLine($"String value: \"{value}\"");
Console.WriteLine($" Hex value: \"{hexString}\"");
Running the above example code, you would get the following output:运行上面的示例代码,您将获得以下输出:
String value: "Hello world"
Hex value: "48656C6C6F20776F726C64"
For Unicode support:对于 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"
}
}
var result = string.Join("", input.Select(c => ((int)c).ToString("X2")));
OR或者
var result =string.Join("",
input.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))));
According to this snippet here , this approach should be good for long strings:根据这里的代码片段,这种方法应该适用于长字符串:
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("x2"));
}
return sb.ToString();
}
usage:用法:
string result = StringToHex("Hello world"); //returns "48656c6c6f20776f726c64"
Another approach in one line一行中的另一种方法
string input = "Hello world";
string result = String.Concat(input.Select(x => ((int)x).ToString("x2")));
few Unicode alternatives很少有 Unicode 替代品
var s = "0𝟏𝟚𝟥𝟰𝟻";
var s1 = string.Concat(s.Select(c => $"{(int)c:x4}")); // left padded with 0 - "0030d835dfcfd835dfdad835dfe5d835dff0d835dffb"
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("-", "");
In case detailed conversion with regard to endianness of bytes or words is required, here is an example of the craft to do bitwise conversion.如果需要对字节或字的字节序进行详细转换,这里是一个进行按位转换的工艺示例。
var bcd = new byte[] { 64, 7, 19, 0, 0, 0 };
var str = String.Join("", bcd.Reverse().Select(b => $"{b:X2}"));
str => 000000317004 str => 000000317004
To also swap 4-bit nibbles of each byte, shift and mask to format each 4 bit separately.还要交换每个字节的 4 位半字节,移位和掩码以分别格式化每个 4 位。
var bcd = new byte[] { 64, 7, 19, 0, 0, 0 };
var str = String.Join("", bcd.Reverse().Select(b => $"{b & 0x0F:X1}{b>>4:X1}"));
str => 000000130740 str => 000000130740
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.