gpt4 book ai didi

c++ - 将 unsigned char > 255 转换为 int

转载 作者:行者123 更新时间:2023-11-30 02:36:22 25 4
gpt4 key购买 nike

我正在用 PLC 编程我正在从中读取值。

它给了我 unsigned char 中的数据。这很好,但我的 PLC 中的值可能超过 255。而且由于无符号字符不能给出超过 255 的值,我得到了错误的信息。

我从库中得到的结构:

struct PlcVarValue
{
unsigned long ulTimeStamp ALIGNATTRIB;
unsigned char bQuality ALIGNATTRIB;
unsigned char byData[1] ALIGNATTRIB;
};
  • ulTimeStamp给出时间
  • bQuality给出true/false(能不能看懂)
  • byData[1] 给出数据。

无论如何,我现在正在尝试:(其中 ppValuesPlcVarValue 的对象)

    unsigned char* variableValue =  ppValues[0]->byData;            
int iVariableValue = *variableValue;

这工作正常...直到 ppValues[0]->byData > 255;

当我尝试以下操作时,例如数字为 257:

unsigned char testValue = ppValues[0]->byData[0];
unsigned char testValue2 = ppValues[0]->byData[1];

输出为 testvalue = 1testvalue2 = 1

这对我来说没有意义。

所以我的问题是,我怎样才能解决这个问题,以便它给我正确的数字?

最佳答案

这实际上看起来像一个可变大小的结构,其中在末尾有一个大小为 1 的数组是一种常见的方式。参见例如this tutorial about it .

在这种情况下,值 257 的两个字节都是 1 是正确的值。将这两个字节视为一个 16 位值,然后组合这些位。一个字节将成为高字节,其中1对应256,然后加上低字节即1,就得到了 256 + 1 当然等于 257。简单的二进制运算。

哪个字节是高字节,哪个字节是低字节我们不能说,但是很容易检查是否可以强制包含值 258 的消息相反,因为那时一个字节仍将是 1,但另一个字节将是 2

如果您知道位移和或运算符,如何将它组合成一个无符号的 16 位值也很容易:

uint8_t high_byte = ...
uint8_t low_byte = ...
uint16_t word = high_byte << 8 | low_byte;

关于c++ - 将 unsigned char > 255 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com