【问题标题】:How to create array with hex chars from array of numbers如何从数字数组中创建带有十六进制字符的数组
【发布时间】:2012-02-20 09:41:07
【问题描述】:

我有一个字符数组:

char macChars=[12];

它的内容是例如macChars[0]=53, macChars[1]=66 ... 我需要将这些数字转换为十六进制字符,所以我会有另一个数组:

 macCharsHex[0]=5 //value 53 in hex
 macCharsHex[1]=B //value 66 in hex

谢谢。

【问题讨论】:

  • 我很难理解你的问题。 “转换为十六进制字符”意义不大。你的意思是arr[0] = 'B';

标签: c char hex


【解决方案1】:

假设 ASCII,您的示例已经包含您希望它们包含的值。所以你不必转换任何东西。也许您想打印它们?

【讨论】:

  • 我糟糕的问题标题选择。
  • 但是还不清楚你想要什么。如果macChars[1]==66,macCharsHex[1]需要变成什么?
【解决方案2】:

这应该可行:

    char hex[255] = {0};       // Varible to hold the hex value
    int dec = 1234;            // Decimal number to be converted
    sprintf(hex,"%X", dec);
    printf("%s", hex);         // Print hex value

【讨论】:

    【解决方案3】:

    例如,使用sprintf()。请注意,它将占用更多空间,如果您有 12 个字节,则字符串表示需要 24 + 1 个字节,因为每个字节需要两个十六进制字符,然后是终止的 '\0'-byte。

    我怀疑我根本不明白这个问题,尤其是不明白给出的例子。

    如果您有 macChars[0] == 53,即十六进制的 0x35,那么我希望在第一个 char 被转换后得到 maxCharsHex[0] == '3'macCharsHex[1] == '5'。这是通过sprintf() 完成的:

    sprintf(maxCharsHex, "%02x", (int) macChars[0] & 0xff);
    

    演员表和掩码对于签名字符来说是安全的。

    【讨论】:

    • 它不会做反向转换吗?
    【解决方案4】:

    它们已经被转换,因为 C 中的字符由它们对应的字符代码表示。

    因此,就在数组中存储内容而言,您无需做任何事情,如果您希望在打印或执行类似操作时正确显示“5”和“B”,则需要使用正确的打印函数(putchar、printf 和 %c 等)。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 2018-05-17
      • 2014-01-04
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多