2017-08-27 25 views
-1

unsigned long x(4バイト)の場合、どのようにしてxの各バイトを16進数で変換し、すべてを配列に格納できますか? unsigned char[4]符号なしlongの各バイトを符号なしchar配列の要素に変換する

溶液1:この場合

unsigned char hex_str[9]; 
    snprintf(hex_str, sizeof(hex_str), "%lX", target_hexstr); 
    printf("hex_str: %s\n", hex_str); 
    printf("size: %lu\n", sizeof(hex_str)); 
    for(int x=0; x<sizeof(hex_str); x++) 
    printf("%x\n", hex_str[x]); 

hex_strディスプレイ1400と9「単位Iは、私はこの二つの溶液を試みたしまっsugestionsその後に基づき

UPDATE

":31,34,30,30,0,0,0,0。24.

解決策2:

hexstr[0] = (x & 0xFF000000) >> 24; 
    printf("%x\n", x[0]); 
    hexstr[1] = (hexstr & 0x00FF0000) >> 16; 
    printf("%x\n", x[1]); 
    hexstr[2] = (hexstr & 0x0000FF00) >> 8; 
    printf("%x\n", x[2]); 
    hexstr[3] = (hexstr & 0x000000FF); 
    printf("%x\n", x[3]); 
    printf("hex_str: %s\n", hex_str); 
この場合

hex_str表示何および4 "単位":0、0、14、0

この2つの溶液を貴様の結果を持って、なぜ?

答えて

2

私はビット単位の操作が好きなので、私は何をするかを表示します。しかし、@ BLUEPIXYの解決策はよりエレガントです。

我々はここで右

  • &ビット単位と
  • >>ビット単位のシフトが必要になります私たちは4BとしてULを期待しているシンプルなソリューションです。

    unsigned long x = 42; 
    unsigned char uc[4]; 
    
    uc[0] = (x & 0x000000FF); 
    uc[1] = (x & 0x0000FF00) >> 8; 
    uc[2] = (x & 0x00FF0000) >> 16; 
    uc[3] = (x & 0xFF000000) >> 24; 
    
    printf("uc[0] = %x \n", uc[0]); 
    printf("uc[1] = %x \n", uc[1]); 
    printf("uc[2] = %x \n", uc[2]); 
    printf("uc[3] = %x \n", uc[3]); 
    
+0

ouldのインデックスの順序はどのようなものですか?たとえば、この投稿:https://stackoverflow.com/a/30840656/2692962では、注文はあなたのものとは逆のものだと思います。 –

+0

まったく同じで、構文も少し違います。 –

+0

表示されていない箇所にはコードを入力しないでください。 –

関連する問題