将unsigned long的每个字节转换为unsigned char数组的元素

时间:2017-08-27 18:41:39

标签: c char type-conversion long-integer unsigned

如果我有unsigned long x(4个字节),我如何转换其十六进制等效项中的x的每个字节并将所有字节存储在数组中:unsigned char[4]?< / p>

更新

基于我得到的消息,我尝试了这两个解决方案:

解决方案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“单位”: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。

为什么这两种解决方案会产生不同的结果?

1 个答案:

答案 0 :(得分:2)

因为我喜欢按位操作,我会告诉你我会做什么。但@ BLUEPIXY的解决方案更优雅。

我们需要

  • clipboard.min.js:7 Uncaught TypeError: Cannot read property 'addEventListener' of null at o (clipboard.min.js:7) at c (clipboard.min.js:7) at o (clipboard.min.js:7) at e.t [as listenClick] (clipboard.min.js:7) at new e (clipboard.min.js:7) at (index):13 o @ clipboard.min.js:7 c @ clipboard.min.js:7 o @ clipboard.min.js:7 t @ clipboard.min.js:7 e @ clipboard.min.js:7 (anonymous) @ (index):13 按位和
  • &按位向右移位

以下是一个简单的解决方案,我们希望>>UL

4B