「サンプル」のような文字列があります。その文字列を16進形式で取得したい; このような:
"796173767265"
C#の構文を教えてください。
まず、それを に取得する必要があるbyte[]
ので、次のようにします。
byte[] ba = Encoding.Default.GetBytes("sample");
そして、次の文字列を取得できます。
var hexString = BitConverter.ToString(ba);
これで、ダッシュ ( -
) を含む文字列が返されるので、次のように簡単に使用できます。
hexString = hexString.Replace("-", "");
必要に応じてそれらを取り除きます。
注:必要に応じて別のものを使用できますEncoding
。
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")));
また
var result =string.Join("",
input.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))));
.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}\"");
上記のコード例を実行すると、次の出力が得られます。
String value: "Hello world"
Hex value: "48656C6C6F20776F726C64"
このスニペット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")));