我使用嵌入式JavaScript引擎,我曾经将fopen()
的结果作为数字传递给JS代码。
int numeric_handle = (int)fopen(*P1, "rb");
return Number::New(numeric_handle); // Return to JavaScript
但现在我需要在64位系统中重新编译,我得到了
fatal error: cast from pointer to smaller type 'int' loses information
现在我有点陷入困境,如何保持我的系统设计,但尽可能少改变代码?我正在考虑使用哈希映射,一个包含FILE *并在该数组中返回ID的数组。但这意味着额外的内存管理,额外的查找。
答案 0 :(得分:2)
long应该足够了,但你也可以使用字节缓冲区
FILE *f;
char buffer[sizeof(f)];
memcpy(buffer, &f, sizeof(f));
为什么你需要这样的黑客?
答案 1 :(得分:1)
使用指针大小的整数,如cstdint中的intptr_t。
答案 2 :(得分:0)
我肯定会选择“隐藏实际类型”,换句话说,使用map
,vector
或类似的类型来存储FILE *
,并传递{{ 1}}或者为需要它的调用检索index
所需的任何内容。这样,你打开文件的方式就不重要了(例如,你可能稍后想要使用FILE *
和C ++,这将更难以存储为某种类型的副本)。