将unsigned int拆分为unsigned char []时出错

时间:2014-12-15 21:00:17

标签: c

我正在尝试将unsigned int拆分为数字到位:例如,数字234变为unsigned char数组{0,0,0,2,3,4},我看到奇怪的效果,我是不确定我是以正确的方式做到的,还有更好的吗?

这是我现在使用的代码:

         void display_decl(unsigned int j)
         {
             unsigned char lst[6];

             lst[5] = j & 0x0f;
             lst[4] = j >> 4 & 0x0f;
             lst[3] = j >> 8 & 0x0f;
             lst[2] = j >> 12 & 0x0f;
             lst[1] = j >> 16 & 0x0f;
             lst[0] = j >> 20 & 0x0f;

             display_digits(lst);

         }

1 个答案:

答案 0 :(得分:1)

要将数字拆分为char代码需要使用预期的基数和空字符终止处理为字符串。

#include <limits.h>

void display_decl(unsigned int j) {
  char lst[sizeof j * CHAR_BIT + 1];
  unsigned base = 10;  // or 16 or any base 2 to 16
  char *p = &lst[sizeof lst] - 1;
  *p = '\0';
  do {
    p--;
    *p = "0123456789ABCDEF"[j%base];
    j /= base;
  } while (j > 0);
  display_string(p);
}