C# 从字符串ascii转换为字符串十六进制

C# 从字符串ascii转换为字符串十六进制,c#,string,hex,ascii,C#,String,Hex,Ascii,假设我有这根绳子 string str = "1234" 我需要一个将此字符串转换为此字符串的函数: "0x31 0x32 0x33 0x34" 我在网上搜索了很多类似的东西,但没有找到这个问题的答案。这是我用过的一个: string str = "1234"; char[] charValues = str.ToCharArray(); string hexOutput=""; foreach (char _eachChar in charValues ) { // Get t

假设我有这根绳子

string str = "1234"
我需要一个将此字符串转换为此字符串的函数:

"0x31 0x32 0x33 0x34"  
我在网上搜索了很多类似的东西,但没有找到这个问题的答案。

这是我用过的一个:

string str = "1234";
char[] charValues = str.ToCharArray();
string hexOutput="";
foreach (char _eachChar in charValues )
{
    // Get the integral value of the character.
    int value = Convert.ToInt32(_eachChar);
    // Convert the decimal value to a hexadecimal value in string form.
    hexOutput += String.Format("{0:X}", value);
    // to make output as your eg 
    //  hexOutput +=" "+ String.Format("{0:X}", value);

}

    //here is the HEX hexOutput 
    //use hexOutput 
private static string ConvertToHex(byte[] bytes)
        {
            var builder = new StringBuilder();

            var hexCharacters = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

            for (var i = 0; i < bytes.Length; i++)
            {
                int firstValue = (bytes[i] >> 4) & 0x0F;
                int secondValue = bytes[i] & 0x0F;

                char firstCharacter = hexCharacters[firstValue];
                char secondCharacter = hexCharacters[secondValue];

                builder.Append("0x");
                builder.Append(firstCharacter);
                builder.Append(secondCharacter);
                builder.Append(' ');
            }

            return builder.ToString().Trim(' ');
        }
输出将是

0X31 0X32 0X33 0X34

这是一个。

这似乎是一个扩展方法的工作

void Main()
{
    string test = "ABCD1234";
    string result = test.ToHex();
}

public static class StringExtensions
{
    public static string ToHex(this string input)
    {
        StringBuilder sb = new StringBuilder();
        foreach(char c in input)
            sb.AppendFormat("0x{0:X2} ", (int)c);
        return sb.ToString().Trim();
    }
}
一些提示。
不要使用字符串连接。字符串是不可变的,因此每次连接字符串时,都会创建一个新的字符串。(内存使用和碎片压力)对于这种情况,StringBuilder通常效率更高

字符串是字符数组,对字符串使用foreach已经可以访问字符数组


这些通用代码非常适合包含在实用程序库中的扩展方法,该库始终可用于您的项目(代码重用)

转换为字节数组,然后转换为十六进制

        string data = "1234";

        // Convert to byte array
        byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);

        // Convert to hex and add "0x"
        data =  "0x" + BitConverter.ToString(retval).Replace("-", " 0x");

        System.Diagnostics.Debug.WriteLine(data);

解决这个问题的一个很好的声明方式是:

var str=“1234”
string.Join(“,str.Select(c=>$”0x{(int)c:X}”))
//输出“0x31 0x32 0x33 0x34”

你能提供第二个例子吗?:
str.ToString(“X”)顺便说一句,您的示例不是ASCII,.NET字符串是Unicode(UTF-16)。@vanneto:那不行
string
没有重载
ToString
,该重载接受类型为
string
的参数,该参数输出0x1、0x2、0x3、0x4。不是OP想要的。您应该删除第一个不正确的版本。你应该修好第二个。它生成正确的输出,但格式应如下所示:
string.format(“0x{0:X2}”,(int)s)
。原因:(1)
X8
从未使用,因为此参数使用的值是字符串。(2)
char
可以包含超过字节范围的值。我只想同时显示string.Format和ToString()。我以为字符是ASCII码。字节足够用于ascii AFAIK。谢谢。请注意,这使用了
string
串联,这可能是性能问题,也可能不是,这取决于
str
的大小。
0X31 0X32 0X33 0X34
void Main()
{
    string test = "ABCD1234";
    string result = test.ToHex();
}

public static class StringExtensions
{
    public static string ToHex(this string input)
    {
        StringBuilder sb = new StringBuilder();
        foreach(char c in input)
            sb.AppendFormat("0x{0:X2} ", (int)c);
        return sb.ToString().Trim();
    }
}
        string data = "1234";

        // Convert to byte array
        byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);

        // Convert to hex and add "0x"
        data =  "0x" + BitConverter.ToString(retval).Replace("-", " 0x");

        System.Diagnostics.Debug.WriteLine(data);