在 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
类型将保存十进制值 0
和 1
。
【讨论】:
谢谢云!但是,我收到“n |= array[idx] == '0' ? 0U : 1U”行的错误,表示表达式必须具有指向对象的类型。关于如何解决这个问题的任何想法? @TylerMckean 不客气!我刚刚尝试了代码 sn-p 并且它编译时没有警告。你确定你复制的正确吗?array
的声明可能不同吗?
你是对的,我没有正确复制它。非常感谢!以上是关于在 C 代码中将 char 数组元素转换为等效的十六进制的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ CLR 中将数组<System::Byte> 转换为 char*?
在 MFC C++ 中将 char 数组转换为 UNICODE