我不熟悉移位,但我正在尝试调试以下代码段:

if (!(strcmp(arr[i].GetValType(), "f64")))
 {
        dem_content_buff[BytFldPos] = tmp_data;
     dem_content_buff[BytFldPos + 1] =  tmp_data >> 8;
     dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
     dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
     dem_content_buff[BytFldPos + 4] = tmp_data >> 32;
     dem_content_buff[BytFldPos + 5] = tmp_data >> 40;
     dem_content_buff[BytFldPos + 6] = tmp_data >> 48;
     dem_content_buff[BytFldPos + 7] = tmp_data >> 56;
        }

我收到一条警告,说“32”到“56”行的类次计数太大。谓词中的“f64”只是表示数据应该是64位数据。

这应该怎么做?

编辑:

我应该把更多的代码放进去。
tmp_data = simulated_data[index_data];

if (!(strcmp(dems[i].GetValType(), "s32")))

{
dem_content_buff[BytFldPos] = tmp_data;
dem_content_buff[BytFldPos + 1] = tmp_data >> 8;
dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
}

如果 (!(strcmp(dems[i].GetValType(), "f64")))
{
dem_content_buff[BytFldPos] = tmp_data;
dem_content_buff[BytFldPos + 1] = tmp_data >> 8;
dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
dem_content_buff[BytFldPos + 4] = tmp_data >> 32;
dem_content_buff[BytFldPos + 5] = tmp_data >> 40;
dem_content_buff[BytFldPos + 6] = tmp_data >> 48;
dem_content_buff[BytFldPos + 7] = tmp_data >> 56;
}

所以,dem_content_buff 现在只包含整数。我也不能将此数组用于 64 位数据吗?

最佳答案

在 unsinged long long 应该工作之前,请确保为 tmp_data 使用 64bit long 类型,但请检查您的编译器和架构文档。

代码应该是这样的。另外,请确保您的 demp_content_buff 被声明为 unsigned char * 或 unsigned char []。

然后将您的代码更改为:

if (!(strcmp(arr[i].GetValType(), "f64")))
    {
        dem_content_buff[BytFldPos] =  ( tmp_data & 0xff );
        dem_content_buff[BytFldPos + 1] =  (tmp_data >> 8 ) & 0xff ;
        dem_content_buff[BytFldPos + 2] =  (tmp_data >> 16) & 0xff ;
        dem_content_buff[BytFldPos + 3] =  (tmp_data >> 24) & 0xff;
        dem_content_buff[BytFldPos + 4] =  (tmp_data >> 32) & 0xff;
        dem_content_buff[BytFldPos + 5] =  (tmp_data >> 40) & 0xff;
        dem_content_buff[BytFldPos + 6] =  (tmp_data >> 48) & 0xff;
        dem_content_buff[BytFldPos + 7] =  (tmp_data >> 56) & 0xff;
        }

关于C++ 移位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2449388/

10-11 18:56