我有一個問題: 我正在通過使用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