在 C 代码中将 char 数组元素转换为等效的十六进制

Posted

技术标签:

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

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

【问题讨论】:

更具体:到目前为止,您尝试了什么?您的困惑是什么原因? 首先,如果您使用的是二进制,您可能希望深入到位级别而不是字节级别。每个 unsigned char 有 8 位数据,如果每 1 或 0 使用整个 char,则浪费 7 个数据点。 另请参阅 ***.com/questions/5307656/… 以及在线发布和 Google 支持的无数其他解决方案。 只需调用strtoul(array, NULL, 2) 转换为unsigned long,然后使用%lX 将其打印出来。 (或snprintf 转换为字符串。) 【参考方案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 的声明可能不同吗? 你是对的,我没有正确复制它。非常感谢!

以上是关于在 C 代码中将 char 数组元素转换为等效的十六进制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ CLR 中将数组<System::Byte> 转换为 char*?

在 MFC C++ 中将 char 数组转换为 UNICODE

如何在 C++ 中将字符串转换为 char 数组?

在 C 中将字符串数组转换为 Int 数组的最佳方法

在 C 和 C++ 中将 int 值转换为 char 指针差异

在 C 中将 ascii char[] 转换为十六进制 char[]