如何在C中将2个二进制文件转换为short

Posted

技术标签:

【中文标题】如何在C中将2个二进制文件转换为short【英文标题】:How to convert 2 binaries to a short in C 【发布时间】:2020-06-23 17:16:12 【问题描述】:

签名:

short convetToSignedShort(uint8_t first, uint8_t second)

  signed short j;
  j = (signed char)first + (signed char)second;

  printf("signed short: %d\n", j);
  return j;

无符号:

 short convetToUnsignedShort(uint8_t first, uint8_t second)
 
   unsigned short j;
   j = (unsigned short)first + (unsigned short)second;

   printf("unsigned short: %d\n", j);
   return j;
 

我知道我没有使用正确的方法。 例如,我需要 0x01 0x01257,我该怎么做?

【问题讨论】:

您需要将其中一个值左移 8 位。 演员(signed char) 是个坏主意,因为您很容易溢出signed char。您需要决定哪个参数将较高位赋予*256 【参考方案1】:

为无符号做这样的事情:

uint16_t convertToUnsignedShort(uint8_t high, uint8_t low)
 
   uint16_t j;
   j = ((uint16_t)high << 8) + (uint16_t)low;

   printf("unsigned short: %d\n", j);
   return j;
 

对于已签名,它的意义不大。您希望低字节的符号位会发生什么?

【讨论】:

以上是关于如何在C中将2个二进制文件转换为short的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中将二进制转换为十进制会出错

如何在C中将十六进制字符串转换为二进制字符串?

如何在 c#.net 中将十六进制转换为十进制? [复制]

如何在C ++中将二进制转换为十六进制

在 C 中将 ascii char[] 转换为十六进制 char[]

如何在 C++ 中将十六进制数字转换为二进制?