我有点移位符号整数第一个字节是指数接下来4是尾数。这似乎并不总是起作用我相信它是因为它被称为char但是当我使它成为一个有符号或未分配的char它仍然不是100%。任何想法?
char mdentrypxexp[1];
memcpy( mdentrypxexp, message + pos, 1 );
int32_t MDEntryPxExp = mdentrypxexp[0];
std::cout << "MDEntryPxExp " << MDEntryPxExp << std::endl;
pos+=1;
char mdentrypxmantissa[4];
memcpy( mdentrypxmantissa, message + pos, 4 );
int32_t MDEntryPxMantissa = mdentrypxmantissa[0] | ( (int32_t)mdentrypxmantissa[1] << 8 ) | (int32_t)mdentrypxmantissa[2] << 16 ) | ( (int32_t)mdentrypxmantissa[3] << 24 );
std::cout << "MDEntryPxMantissa " << MDEntryPxMantissa << std::endl;
pos+=4;
double MDEntryPx = MDEntryPxMantissa * pow10(MDEntryPxExp);
std::cout << " MDEntryPx=" << MDEntryPx;
答案 0 :(得分:0)
您正在从4签名的int32_t构建一个签名的int32_t。向上转换2的补码有符号整数使得按位运算变得棘手。使用无符号整数然后转换。
uint32_t MDEntryPxMantissa_tmp = ( static_cast< uint32_t >( mdentrypxmantissa[0] ) | ( static_cast< uint32_t >( mdentrypxmantissa[1] ) << 8 ) | static_cast< uint32_t >( mdentrypxmantissa[2] ) << 16 ) | ( static_cast< uint32_t >( mdentrypxmantissa[3] ) << 24 ) );
int32_t MDEntryPxMantissa = *reinterpret_cast< int32_t * >( &MDEntryPxMantissa_tmp );