如何获取float地址以与memcpy一起使用

How to get float address for use with memcpy?

本文关键字:memcpy 一起 地址 float 何获取 获取      更新时间:2023-10-16

我试图用float变量的内存地址填充字节/char数组(数组长度为4个字节=指针),但是无论我做什么,它都会不断获得float值,而不是地址:

float f = 20.0f;
memcpy(data, &f, sizeof(data));

与:

调试
printf("Array: %#X, %#X, %#X, %#X", data[0], data[1], data[2], data[3]);

...以十六进制格式给出浮点值(20.0):

Array: 0, 0, 0XA0, 0X41

我需要的是浮点的内存地址。我尝试以某种不同的方式铸造/取消给它,但不能使它起作用...

这是 memcpy的工作方式:需要一个指针到 data 它将复制。您的 Data 是指向浮动的指针,因此您需要将指针传递给指针到Float:

#include <cstring>
int main() {
   float f = 20.0f;
   float* pf = &f;
   char data[sizeof(pf)];
   memcpy(data, &pf, sizeof(data));
}

对于C解决方案,将十六进制数据保存到A 复合文字

#include <stdio.h>
int main(void) {
  char data[sizeof (float*)];
  printf("%pn", (void*) data);
  float f;
  printf("%pn", (void*) &f);
  memcpy(data, &(float *){&f}, sizeof (float*));
  for (unsigned i = 0; i<sizeof data; i++) {
    printf("%02hhX ", data[i]);
  }
  puts("");
}

输出

0xffffcba8
0xffffcba4
A4 CB FF FF 00 00 00 00 

地址有效到块的末端。
根据需要调整endian/打印订单。