如何获取用于 memcpy 的浮动地址?
How to get float address for use with memcpy?
我正在尝试用 float 变量的内存地址填充 byte/char 数组(数组长度为 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
我需要的是float的内存地址。我以不同的方式尝试了 casting/dereferencing,但无法正常工作...
这就是 memcpy
的工作方式:它需要一个指向要复制的 数据 的指针。您的 data 是指向浮点数的指针,因此您需要将指针传递给指向浮点数的指针:
#include <cstring>
int main() {
float f = 20.0f;
float* pf = &f;
char data[sizeof(pf)];
memcpy(data, &pf, sizeof(data));
}
对于 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
该地址在块结束前有效。
根据需要调整 endian/print 顺序。
我正在尝试用 float 变量的内存地址填充 byte/char 数组(数组长度为 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
我需要的是float的内存地址。我以不同的方式尝试了 casting/dereferencing,但无法正常工作...
这就是 memcpy
的工作方式:它需要一个指向要复制的 数据 的指针。您的 data 是指向浮点数的指针,因此您需要将指针传递给指向浮点数的指针:
#include <cstring>
int main() {
float f = 20.0f;
float* pf = &f;
char data[sizeof(pf)];
memcpy(data, &pf, sizeof(data));
}
对于 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
该地址在块结束前有效。
根据需要调整 endian/print 顺序。