【发布时间】:2016-06-16 10:45:05
【问题描述】:
我有一个问题: 我正在通过使用 memcpy (在 C 中)并在 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的值?
【问题讨论】:
-
您使用
memcpy对数据包进行编码,那么为什么不再次使用一个对数据包进行解码呢?double x; memcpy(&x, packet + 32, sizeof(double)); -
谢谢!我会努力的!
-
如果我的变量位于数据包的中间(即从位置 8 到位置 15)怎么办...我必须使用 sintax "memcpy(&x, packet + 8, sizeof(双倍的));” ??它能够从位置 8 读取到 15 或者我必须定义结束位置?
-
你测试了吗?不检查标准,我想应该没问题。
-
我测试了它,但它似乎没有考虑变量的增量(即,我总是在 memcpy 调用之后和之前的变量之间的差异等于增量( +3.0))。现在 pippo 在缓冲区中从位置 8 到 15(8 个字节,双精度) if(!(counter%100)) { printf("Pippo value (double) is : %f\n", pippo); memcpy(&pippo, 数据包 + 8, sizeof(double)); printf("我以 %lf\n 的形式返回 pippo 值", pippo);
标签: c char double ascii memcpy