私は文字列を持っていますが、元の文字を整数に変換してからそれらの整数を 16 進数文字に変換することで 16 進数文字を変換する 16 進数文字列が必要です。それ、どうやったら出来るの?
これは私がVBで行った方法です:
for i = 1 to len(str)
hex_str = hex_str + lcase(cstr(hex(asc(mid(str, i, 1)))))
next
では、C# でこれを行う最も慣用的な方法は何ですか?
C#で私が思いつくことができる最も簡単なアプローチは次のとおりです。
var hexStr = str.ToCharArray()
.Aggregate("", (current, c)
=> current + Convert.ToInt32(c).ToString("X"));
この1行目は、文字列をタイプの文字配列にchar[]
変換し、2行目と3行目は、各文字を整数に変換してからInt32
、タイプの16進文字に変換しString
ます。その16進文字は、集計関数を介してhexStr
ofタイプに追加されます。String
上記の式で使用される関数は次のとおりです。
Enumerable.Aggregate ; System.LINQから、追加する必要があるかもしれませんusing System.LINQ;
Int32.ToString(String format)を渡す"X"
と、結果が10進数ではなく16進数になります。
集計には、ラムダ式(parameters => return value
)を使用しました。それは取り、実行するcurrent
関数c
ですreturn current + Convert.ToInt32(c).ToString("X");
不明な点がある場合は、以下のコメントでお気軽にお問い合わせください。
これを試して:
for (var i = 1; i <= str.Length; i++)
{
hex_str = hex_str + Convert.ToString(Convert.ToString(Convert.ToInt32(str[i - 1]), 16).ToUpper()).ToLower();
}
私は VB.NET 開発者ではありませんが、コンバーターを使用すると、次のようになります。
for (i = 1; (i <= str.Length); i++) {
hex_str = (hex_str + hex(asc(str.Substring((i - 1), 1))).ToString().ToLower());
}