我不熟悉移位,但我正在尝试调试以下代码段:
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/