【问题标题】:Convert char array elements into Hexadecimal equivalent in C code在 C 代码中将 char 数组元素转换为等效的十六进制
【发布时间】:2021-10-23 22:40:26
【问题描述】:

我目前正在尝试在 C 代码中创建一个自定义函数,该函数将采用无符号字符数组,例如:array[] = "11000000111111111000000010000000" 作为输入并将其转换为 0xC0FF8080 并将其存储回数组或简单地 printf到控制台。任何有助于消除我对此的困惑的帮助将不胜感激。谢谢!

【问题讨论】:

  • 更具体:到目前为止,您尝试了什么?您的困惑是什么原因?
  • 首先,如果您使用的是二进制,您可能希望深入到位级别而不是字节级别。每个 unsigned char 有 8 位数据,如果每 1 或 0 使用整个 char,则浪费 7 个数据点。
  • 另请参阅 stackoverflow.com/questions/5307656/… 以及在线发布和 Google 支持的无数其他解决方案。
  • 只需调用strtoul(array, NULL, 2) 转换为unsigned long,然后使用%lX 将其打印出来。 (或snprintf 转换为字符串。)

标签: arrays c binary hex data-conversion


【解决方案1】:

迭代字符串,每次迭代将结果向左移动并将最右边的位设置为适当的值:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char const array[] = "11000000111111111000000010000000";
    size_t const length = strlen(array);

    unsigned long long n = 0ULL;
    for (size_t idx = 0U; idx < length; ++idx)
    {
        n <<= 1U;
        n |= array[idx] == '0' ? 0U : 1U;
        // n |= array[idx] - '0'; // An alternative to the previous line
    }

    printf("%#llx\n", n);
}

这使用了一个(有符号的)char 数组,但是方法是一样的。

将结果存回char数组:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char array[] = "11000000111111111000000010000000";
    size_t length = strlen(array);

    for (size_t idx = 0U; idx < length; ++idx)
        array[idx] = array[idx] - '0';

    for (size_t idx = 0U; idx < length; ++idx)
        printf("%d", array[idx]);
    putchar('\n');
}

请注意,这里的 char 类型将保存十进制值 01

【讨论】:

  • 谢谢云!但是,我收到“n |= array[idx] == '0' ? 0U : 1U”行的错误,表示表达式必须具有指向对象的类型。关于如何解决这个问题的任何想法?
  • @TylerMckean 不客气!我刚刚尝试了代码 sn-p 并且它编译时没有警告。你确定你复制的正确吗? array 的声明可能不同吗?
  • 你是对的,我没有正确复制它。非常感谢!
猜你喜欢
  • 2015-03-25
  • 2016-03-24
  • 1970-01-01
  • 2013-05-07
  • 2013-10-14
  • 2011-05-25
  • 2019-01-01
  • 2021-06-09
  • 2020-08-06
相关资源
最近更新 更多