代码之家  ›  专栏  ›  技术社区  ›  Zax Ftw

如何获取用于memcpy的浮点地址?

  •  0
  • Zax Ftw  · 技术社区  · 7 年前

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

    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
    

    我需要的是浮点的内存地址。我试着用一些不同的方法来转换/取消引用它,但无法让它工作。。。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Andriy Tylychko    7 年前

    就是这样 memcpy 工作:它需要一个指向 它将复制。你的 是指向浮点的指针,所以需要将指针传递给指向浮点的指针:

    #include <cstring>
    
    int main() {
       float f = 20.0f;
       float* pf = &f;
       char data[sizeof(pf)];
       memcpy(data, &pf, sizeof(data));
    }
    
        2
  •  0
  •   chux    7 年前

    对于C解决方案,将十六进制数据保存到

    #include <stdio.h>
    
    int main(void) {
      char data[sizeof (float*)];
      printf("%p\n", (void*) data);
      float f;
      printf("%p\n", (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