0

所以我在我的项目中遇到了障碍。我想要做的是找出一种方法来获取代表标志的四个单独的二进制字符。现在我的最后一个任务是把这四个标志放在一个 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 的十六进制

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

4

4 回答 4

1
int flags;
flags = (O << 3) | (C << 2) | (Z << 1) | N;
sprintf(buffer, "0x%02X", 0xff & flags);

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

buffer是一个足够大的 char 数组。

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

于 2012-10-26T09:14:16.733 回答
0

无符号字符标志 = 0;标志 = ((O << 3) | (C << 2) | (Z << 1) | N);

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

于 2012-10-26T09:28:07.713 回答
0

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

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

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

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

于 2012-10-26T09:28:19.680 回答
0

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

将您的 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;
    }
于 2017-08-21T00:25:51.260 回答