如何在64位系统中将FILE *转换为数字句柄?

时间:2014-01-16 07:11:48

标签: c++ pointers fopen embedded-v8

我使用嵌入式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的数组。但这意味着额外的内存管理,额外的查找。

3 个答案:

答案 0 :(得分:2)

long应该足够了,但你也可以使用字节缓冲区

FILE *f;
char buffer[sizeof(f)];
memcpy(buffer, &f, sizeof(f));

为什么你需要这样的黑客?

答案 1 :(得分:1)

使用指针大小的整数,如cstdint中的intptr_t。

答案 2 :(得分:0)

我肯定会选择“隐藏实际类型”,换句话说,使用mapvector或类似的类型来存储FILE *,并传递{{ 1}}或者为需要它的调用检索index所需的任何内容。这样,你打开文件的方式就不重要了(例如,你可能稍后想要使用FILE *和C ++,这将更难以存储为某种类型的副本)。