2017-05-24 68 views

回答

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

另外,請注意這裏沒有「放入十六進制」,這個數字也是用十進制打印的(它是1279347777)。數字不是十六進制的,只有打印出來時才表示。

+0

,試圖調用編譯器說的方法時似乎很大,但由於某些原因:衝突類型uint_from_string的。不知道爲什麼,但它運行在一個小的ARM芯片上。 – Curnelious

+1

@Curnelious你需要把這個函數放在'main'之前,或者試着把函數原型'uint32_t uint_from_string(const char * s)' –

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 
相關問題