Convert from string ascii to string Hex

前端 未结 7 1087
既然无缘
既然无缘 2021-02-07 10:31

Suppose I have this string

string str = \"1234\"

I need a function that convert this string to this string:

\"0x31 0x32 0x33          


        
相关标签:
7条回答
  • 2021-02-07 10:40

    This seems the job for an extension method

    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();
        }
    }
    

    A few tips.
    Do not use string concatenation. Strings are immutable and thus every time you concatenate a string a new one is created. (Pressure on memory usage and fragmentation) A StringBuilder is generally more efficient for this case.

    Strings are array of characters and using a foreach on a string already gives access to the character array

    These common codes are well suited for an extension method included in a utility library always available for your projects (code reuse)

    0 讨论(0)
  • 2021-02-07 10:41

    This is one I've used:

    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(' ');
            }
    

    And then used like:

    string test = "1234";
    ConvertToHex(Encoding.UTF8.GetBytes(test));
    
    0 讨论(0)
  • 2021-02-07 10:49

    Convert to byte array and then to hex

            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);
    
    0 讨论(0)
  • 2021-02-07 10:50

    A nice declarative way to solve this would be:

    var str = "1234"
    
    string.Join(" ", str.Select(c => $"0x{(int)c:X}"))
    
    // Outputs "0x31 0x32 0x33 0x34"
    
    0 讨论(0)
  • 2021-02-07 10:51
    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 
    
    0 讨论(0)
  • 2021-02-07 11:06
     [TestMethod]
        public void ToHex()
        {
            string str = "1234A";
            var result = str.Select(s =>  string.Format("0x{0:X2}", ((byte)s)));
    
           foreach (var item in result)
           {
               Debug.WriteLine(item);
           }
    
        }
    
    0 讨论(0)
提交回复
热议问题