c - 如何将十六进制字节 {0x00, 0x03, 0x9e, 0x40} 转换为 int 以在 c 中进行计算?

标签 c hex

我在将十六进制字节转换为 int 以便计算总和时遇到问题。

我在 char 数组中有这个十六进制字节,但在将它们转换为十进制(int)并对它们求和时遇到问题。这是一些代码行:

int main() {

  char recv[4] = {0x00, 0x03, 0x9e, 0x40};

  int d1 = recv[0] * 256;
  int d2 = recv[1] * 256;
  int d3 = recv[2] * 256;
  int d4 = recv[3] * 1;

  int dt = d1 + d2 + d3 + d4; 

  printf("d1: %d\n", d1);
  printf("d2: %d\n", d2);
  printf("d3: %d\n", d3);
  printf("d4: %d\n", d4);

  printf("sum is: %d\n", dt);


  return 0;

这是我得到的结果:

d1: 0
d2: 768
d3: -25088
d4: 64
sum is: -24256

最佳答案

#include <stdio.h>

int main(void)
{
    char recv[4] = {0x00, 0x03, 0x9e, 0x40};
    unsigned int result;

    result = ((unsigned char)recv[0] << 24) | 
             ((unsigned char)recv[1] << 16) |
             ((unsigned char)recv[2] <<  8) |
             ((unsigned char)recv[3] <<  0);

    printf("0x%08X\n", result);

    return 0;
}

输出

(link)

Success #stdin #stdout 0s 4568KB
0x00039E40

关于c - 如何将十六进制字节 {0x00, 0x03, 0x9e, 0x40} 转换为 int 以在 c 中进行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691147/

相关文章:

c - 如何用 C 语言编写过滤器程序?

C - 如何 (*(void (*)()) 代码);在没有任何调用的情况下在 C 程序中运行

java - CPP 到 Java 的转换

Python 2.7 : how to prevent automatic decoding from hex to string

c++ - 如何使用带有 libcurl 的 HTTP 在 C/C++ 中上传文件?

c++ - 与 gcc 相比,comeau 编译器值得吗?

c - 使用快速排序对带有指针的数组进行排序

video - 如何在切割 MP4 文件的一部分后确定 MP4 文件中哪些偏移量发生了变化

c# - 如何按位操作十六进制值?

c - 通过设备驱动程序访问 AXIS FIFO 寄存器时出现未处理的故障