1

私は最近、数値の通常の文字列を ASCIII 16 進数に変換し、16 進数を文字列に格納する必要があるプロジェクトに取り組んでいました。

だから私は次のようなものを持っていました

string random_string = "4000124273218347581"

そして、それを次の形式の16進数文字列に変換したかった

string hex_string = "34303030313234323733323138333437353831"

これは奇妙に具体的なタスクのように思えるかもしれませんが、私が遭遇したタスクであり、その実行方法を見つけようとしたときに、オンラインで答えを見つけることができませんでした.

とにかく、私はそれを理解し、コードを整理するためのクラスを作成しました。

他の誰かが通常の文字列を 16 進数の文字列に変換する必要がある場合に備えて、私のソリューションを含む回答をすぐに投稿します。

(私はstackoverflowにかなり慣れていないので、これで問題ないことを願っています)

=========================================

十分な評判がないため、質問してから最初の 8 時間以内に自分で質問に答えることができないことが判明しました。

だから私は代わりにここに私の答えを固執しています:

さて、これが私の解決策です:

StringToHex名前空間で呼び出されるクラスを作成しました

public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

そして、それを使用するには、次の形式で何かを行う必要があります。

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

正しく機能している場合、変換された文字列は元の文字列の長さの 2 倍になるはずです (16 進数では各文字を表すのに 2 バイトを使用するため)。

さて、誰かがすでに指摘しているように、ここで同様のことをしている記事を見つけることができます:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

しかし、私はそれが私の特定のタスクにはあまり役に立たなかったので、私のソリューションはよりエレガントだと思いたいです;)

4

3 に答える 3

7

これは、文字列の文字コードが 255 (0xFF) を超えない限り機能します。

string hex_string =
  String.Concat(random_string.Select(c => ((int)c).ToString("x2")));

注: これは 16 (0x10) 未満の文字コードでも機能します。たとえば、 ではなく、"0D0A"改行文字から16 進コードを生成します。"\r\n""DA"

于 2012-04-04T13:38:54.957 に答える
2

you need to read the following article -

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

the main function that converts data into hex format

public string Data_Hex_Asc(ref string Data)
{
    string Data1 = "";
    string sData = "";
    while (Data.Length > 0)
    //first take two hex value using substring.
    //then convert Hex value into ascii.
    //then convert ascii value into character.
    {
        Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2),  16)).ToString();
        sData = sData + Data1;
         Data = Data.Substring(2, Data.Length - 2);
    }
    return sData;
}

see if this what you are looking for.

于 2012-04-04T13:32:16.260 に答える
-1

さて、これが私の解決策です:

StringToHex名前空間で呼び出されるクラスを作成しました

public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

そして、それを使用するには、次の形式で何かを行う必要があります。

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

正しく機能している場合、変換された文字列は元の文字列の長さの 2 倍になるはずです (16 進数では各文字を表すのに 2 バイトを使用するため)。

さて、誰かがすでに指摘しているように、ここで同様のことをしている記事を見つけることができます:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

しかし、私はそれが私の特定のタスクにはあまり役に立たなかったので、私のソリューションはよりエレガントだと思いたいです;)

于 2012-04-05T08:49:23.407 に答える