78

「サンプル」のような文字列があります。その文字列を16進形式で取得したい; このような:

"796173767265"

C#の構文を教えてください。

4

7 に答える 7

177

まず、それを に取得する必要があるbyte[]ので、次のようにします。

byte[] ba = Encoding.Default.GetBytes("sample");

そして、次の文字列を取得できます。

var hexString = BitConverter.ToString(ba);

これで、ダッシュ ( -) を含む文字列が返されるので、次のように簡単に使用できます。

hexString = hexString.Replace("-", "");

必要に応じてそれらを取り除きます。

注:必要に応じて別のものを使用できますEncoding

于 2013-06-08T12:41:54.847 に答える
28

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"
    }
}
于 2014-12-08T17:26:55.843 に答える
25
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))));
于 2013-06-08T12:48:36.480 に答える
24

.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"
于 2020-12-30T14:33:15.550 に答える
11

このスニペット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")));
于 2014-09-03T07:51:07.190 に答える