我有一个问题: 我正在通过使用 memcpy(在 C 中)并在 char 缓冲区中存储一个 double 变量来进行转换。我想要做的是将缓冲区内的 char 转换回我的初始变量 (double)。如果我转换缓冲区的每个位置,我得到的是 ASCII 字符的转换,而不是变量的真实值
我发布我的代码是为了更好地解决我的问题:
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
的值?
最佳答案
请注意,当您在套接字上发送内容时,必须考虑字节顺序,否则您可能会得到错误的值。
我建议你使用像“htonl”、“ntohl”这样的函数,因为这样的函数就是为此而设计的。
编辑:您的 memcpy 假设您的双字节是 4 个八位字节,所以主要是 x32 位机器。如果您的代码在 x64 架构上运行,我认为它会失败。 抱歉!这是错误的。
关于c - 从 memcpy 返回到双变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35766568/