打包两个8位值

Leo*_*ssi 2 c bytearray type-conversion

我遇到了一个简单的问题.这是代码:

int main(int argc, char **argv)
{
  char buf[2] = {0xd, 0x1f};
  unsigned int a;

  a = ((buf[1] << 8) & 0xFF00) | buf[0];
  printf("%d\n",a);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

a我需要的值是0x1FD(509)但是当我运行上面的程序时,输出a0x1F0D(7949).

我怎样才能做到这一点?

编辑:好的,让我澄清一下.我正在做一个项目,我收到代码片段中显示的数据.为了简化我已将它们声明为本地.主要的是我希望将数据解释为0x1FD(509).

das*_*ght 6

该程序执行您要求它执行的操作.混淆的来源是0xd常数,实际上是0x0d因为char是8位.0x1f像你一样将它包装在一起应该生产0x1f0d,它确实如此.