C++ 如何在64位系统中将文件*转换为数字句柄?

C++ 如何在64位系统中将文件*转换为数字句柄?,c++,pointers,fopen,embedded-v8,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 现在我有点困

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

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

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

你为什么需要这样的破解?

使用指针大小的整数,比如来自cstdint的intptr\u t。

我当然会选择“隐藏实际类型”,换句话说,使用
映射
向量
或类似类型来存储
文件*
,并传递
索引
或检索
文件所需的任何内容*
,以获取需要它的调用。这样,打开文件就不重要了(稍后可能想使用<代码> fStase和C++,这将更难存储为某种类型的副本)。p>
是纯C语法吗?我从C++中知道它的意思,这是C++,但是我坚持旧的好fOpen-(),Frad()文件IOOn Linux,你可以使用<代码>文件> <代码>。Visual Studio也有类似的
\u fileno
。我嵌入了JavaScript引擎,希望在脚本中使用fopen()。JavaScript中没有指针类型,只有数字或字符串。当然,在Windows中,长是4字节