2012-10-26 382 views
0

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

因此,例如:

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

现在我已经尝试使它在一个字符串中,然后解析它,但我很困惑,现在失去了。我看不到正确的输出。

回答

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

flags定义包含所有标志一个int -variable。

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

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

+0

如果有什么修改代码,我想要十六进制是4个字符长? –

+0

@Prince Kishore:'sprintf(buffer,“%04X”,0xffff&flags);'//假定你不需要0x前缀。在4个十六进制数字之后,仍然有第5个字符= 0终止字符串。 “ – Curd

0

unsigned char flags = 0; (0 < < 3)|(C < < 2)|(Z < < 1)| N);

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

+1

”...您需要的值以及可以显示为十六进制值的值。“十六进制只是一种表示。 – glglgl

0

放标志[4] =“\ 0”

我们可以有一个新的变量炭指针指向这个字符数组。

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

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

0

您可以使用此代码转换一个byte []以十六进制字符串

投下你的char []成字节[]或根据您的需要:)

/// <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; 
    }