如何根据您的目的使用此代码。例子
#include <cstdio>
#include <cinttypes>
#include <type_traits>
#include <cstddef>
#include <iostream>
int main()
{
uint64_t tsc = 0xdeaddeadc0dec0de;
uint32_t MSB = *((uint32_t*)&tsc+1);
uint32_t LSB = *((uint32_t*)&tsc);
std::printf("low %x high %x \n", LSB,MSB);
uint64_t MLSB = 0;
*((uint32_t*)&MLSB) = LSB;
*((uint32_t*)&MLSB+1) = MSB;
std::printf("highlow %lx \n", MLSB);
uint64_t LMSB = 0;
*((uint32_t*)&LMSB+1) = LSB;
*((uint32_t*)&LMSB) = MSB;
std::printf("lowhigh %lx \n", LMSB);
}
解决您的问题
#include <cstdio>
#include <cinttypes>
#include <type_traits>
#include <cstddef>
#include <iostream>
int main()
{
int x = 0b01000000001101110000000000000000;
int y = 0b00000000000000000000000000000000;
uint64_t int64 = 0;
*((uint32_t*)&int64+1) = x;
*((uint32_t*)&int64) = y;
double d = *((double*)&int64);
std::printf("double d %e \n", d);
std::printf("int int64 %llx \n", int64);
x = 0b00111101110100011101110111110111;
y = 0b11100111001100101010000110111001;
*((uint32_t*)&int64+1) = x;
*((uint32_t*)&int64) = y;
d = *((double*)&int64);
std::printf("double d %e \n", d);
std::printf("int int64 %llx \n", int64);
}
结果
双 d 2.300000e+01
int int64 4037000000000000
双 d 6.500000e-11
int int64 3dd1ddf7e732a1b9
或者没有引用问题
#include <cstdio>
#include <cinttypes>
#include <type_traits>
#include <cstddef>
#include <iostream>
int main()
{
unsigned char x[] = {0b01000000,0b00110111,0b00000000,0b00000000};
unsigned char y[] = {0b00000000,0b00000000,0b00000000,0b00000000};
uint64_t int64 = 0;
*((unsigned char*)&int64+7) = x[0];
*((unsigned char*)&int64+6) = x[1];
*((unsigned char*)&int64+5) = x[2];
*((unsigned char*)&int64+4) = x[3];
*((unsigned char*)&int64+3) = y[0];
*((unsigned char*)&int64+2) = y[1];
*((unsigned char*)&int64+1) = y[2];
*((unsigned char*)&int64+0) = y[3];
double d =0;
*((unsigned char*)&d+7) = x[0];
*((unsigned char*)&d+6) = x[1];
*((unsigned char*)&d+5) = x[2];
*((unsigned char*)&d+4) = x[3];
*((unsigned char*)&d+3) = y[0];
*((unsigned char*)&d+2) = y[1];
*((unsigned char*)&d+1) = y[2];
*((unsigned char*)&d+0) = y[3];
//*((double*)&int64);
std::printf("double d %e \n", d);
std::printf("int int64 %lu \n", int64);
}