【问题标题】:How to char[] to Hex? C如何将字符 [] 转换为十六进制? C
【发布时间】:2012-10-16 13:02:18
【问题描述】:

所以我在我的项目中遇到了障碍。 我想要做的是找出一种方法来获取代表标志的四个单独的二进制字符。现在我的最后一个任务是把这四个标志放在一个 char[] 中,这一点都不难。但是现在,我想取四个并将其转换为十六进制。

例如:

O = 1;
C = 1;
Z = 0;
N = 0;

char flags[5];
flags[0] = O;
flags[1] = C;
flags[2] = Z;
flags[3] = N;

现在我想制作一个字符串或可以将上面的内容转换为十六进制的东西。因此,例如我想将 1100 转换为 0xC 的十六进制

现在我试着先把它变成一个字符串然后解析它,但我现在很困惑和迷路。我只是看不到获得正确的输出。

【问题讨论】:

    标签: c string char hex


    【解决方案1】:

    您可以使用此代码将字节[] 转换为十六进制字符串

    将您的 char[] 转换为 byte[] 或根据需要修改代码 :)

        /// <summary>
        /// Converts a byte array to a hex string. For example: {10,11} = "0A 0B"
        /// </summary>
        public static string ByteToHex(byte[] data)
        {
            StringBuilder sb = new StringBuilder();
    
            foreach (byte b in data)
            {
                string hex = ByteToHex(b);
                sb.Append(hex);
                sb.Append(" ");
            }
    
            if (sb.Length > 0)
                sb.Remove(sb.Length - 1, 1);
    
            return sb.ToString();
        }
    
        /// <summary>
        /// Converts the byte to a hex string. For example: "10" = "0A";
        /// </summary>
        public static string ByteToHex(byte b)
        {
            string sB = b.ToString(ConstantReadOnly.HexStringFormat, CultureInfo.InvariantCulture);
    
            if (sB.Length == 1)
                sB = "0" + sB;
    
            return sB;
        }
    

    【讨论】:

      【解决方案2】:

      放置标志[4]="\0"

      我们可以有一个新的 variable-char 指针指向这个字符数组。

      那么你可以使用sprintf(newArray[i], "%x", flags[i]);

      这会将newArray字符串中的每个字符生成为HEX,我们可以通过打印字符串来获得输出。 printf("%s\n",newArray);

      【讨论】:

        【解决方案3】:

        无符号字符标志 = 0; 标志 = ((O

        现在标志包含您需要的十六进制值。

        【讨论】:

        • "...您需要的值,您可以将其显示为十六进制值。"十六进制只是一种表示。
        【解决方案4】:
        int flags;
        flags = (O << 3) | (C << 2) | (Z << 1) | N;
        sprintf(buffer, "0x%02X", 0xff & flags);
        

        flags 被定义为一个包含所有标志的 int 变量。

        buffer 是一个足够大的字符数组。

        在这种情况下不需要0xff &amp; ..,但如果您的 flags 变量可能变为负数并且您仍然只希望输出一个字节(2 个十六进制数字),则可能有一天。

        【讨论】:

        • 如果我想让十六进制的长度为 4 个字符怎么办??
        • @Prince Kishore: sprintf(buffer, "%04X", 0xffff &amp; flags); // 假设你不想要 0x 前缀。在 4 个十六进制数字之后,仍然会有第 5 个字符 =0 终止字符串。
        猜你喜欢
        • 2018-01-31
        • 1970-01-01
        • 2013-02-07
        • 2017-08-23
        • 2014-03-19
        • 2013-11-12
        • 2014-06-09
        • 2015-10-30
        相关资源
        最近更新 更多