我想得到这个结果:
static uint32_t const m_deadbeef = 0x4c414c41 ; //this hex is "LALA"
来自此输入:
char data[]="LALA";
所以我需要将data
放在unint32_t
内,这样看起来就像是第一行。
我该如何有效地做到这一点?
答案 0 :(得分:5)
这是微不足道的,你只需要抓住字符值并将它们组合起来:
uint32_t uint_from_string(const char *s)
{
uint32_t x = 0;
for (int i = 0; *s != '\0' && i < 4; ++i)
{
x <<= 8;
x |= (uint32_t) *s++;
}
return x;
}
如果你这样使用它:
const uint32_t m_deadbeef = uint_from_string("LALA");
您将在那里获得值0x4c414c41
。
此外,请注意没有&#34;作为十六进制&#34;在这里,这个数字也用十进制打印(它是1279347777
)。数字不是十六进制,只是打印出来时的表示。
答案 1 :(得分:0)
#include <stdint.h>
#include <stdio.h>
union str32b
{
uint32_t hex;
char str[4];
str32b(const char* in, int big_end = 0)
{
if (big_end)
for (int i = 0; i < 4; ++i)
str[i] = in[i];
else
for (int i = 0; i < 4; ++i)
str[4 - i - 1] = in[i];
}
};
int main()
{
const char* input = "ABCD";
str32b l_end = str32b(input);
printf("Little endian:\t0x%x\n", l_end.hex);
str32b b_end = str32b(input, 1);
printf("Big endian:\t0x%x\n", b_end.hex);
return 0;
}
输出:
Little-endian: 0x41424344
Big-endian: 0x44434241