2012-10-26 377 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; 
    }