将字符串作为十六进制放在Uint32_t中

时间:2017-05-24 11:21:30

标签: c

我想得到这个结果:

static uint32_t const m_deadbeef = 0x4c414c41 ; //this hex is "LALA"

来自此输入:

char data[]="LALA";

所以我需要将data放在unint32_t内,这样看起来就像是第一行。 我该如何有效地做到这一点?

2 个答案:

答案 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