我有一个问题: 我正在通过使用memcpy(在C中)并在char缓冲区内存储一个双变量来进行强制转换。我想要做的是将缓冲区内的char转换回初始变量(double)。如果我转换缓冲器的每一个位置,我得到ASCII字符,没有可变从memcpy回到双变量
的真正价值我后我的代码,以明确更好的我的问题的转换:
int counter = 1;
double pippo = 100.0;
const int cPacketSizeInBytes = 40;
char packet[cPacketSizeInBytes];
do
{
.....;
.....;
memcpy(&packet[32], (char*)&pippo, sizeof(double));
serverSocket.Send((char*)&packet, cPacketSizeInBytes);
pippo += 3.0;
if (pippo > 180.0) pippo = 0.0;
counter++;
if(!(counter%100))
{
printf("Pippo value (double) is : %f\n", pippo);
for (int i = 32; i < 40; i ++) {
printf("%c\n", packet[i]);
double x = (double)packet[i];
printf("%f\n", x);
}
}
}
x
是packet[i]..
中的ASCII字符的双重转换我怎样才能合并包内的所有字符(即packet[32....39]
)以获取返回值pippo
?
您使用'memcpy'来编码数据包,那么为什么不再使用一个来解码数据包呢? 'double x; memcpy(&x,packet + 32,sizeof(double));' – MikeCAT
谢谢!我会试试! – user2572206
如果我的变量位于数据包的中间位置(即从位置8到位置15)......我必须使用sintax“memcpy(&x,packet + 8,sizeof(double));” ??它能够从位置8到15读取,或者我必须定义结束位置? – user2572206