如何从 int 转换为长整 int*

How to cast from int to long long int*?

本文关键字:int 转换      更新时间:2023-10-16

我试过这个:

request.DeviceID = (long long int *)&(DeviceID);
request.ProdReqID = (long long int *)&(ProdReqID);

但是当我这样做时:

cout << "DEVICE ID: " << request.DeviceID << " " << request.ProdReqID << " " << endl;
cout << "DEVICE ID: " << &request.DeviceID << " " << &request.ProdReqID << " " << endl;

我得到:

设备 ID:0xfffa9bf0 0xfffa9bf4 设备 ID:0xfffa9bd4 0xfffa9bd8

我真的不知道这是否有效。 我希望看到实际数字的打印出来...

如果DeviceIDProdReqIDint,而request.DeviceIDrequest.ProdReqIDlong long int,则执行:

request.DeviceID = (long long int)DeviceID;
request.ProdReqID = (long long int)ProdReqID;

使用石膏甚至:

request.DeviceID = DeviceID;
request.ProdReqID = ProdReqID;

使用类型升级。

你没有说类型到底是什么,但假设int DeviceIDlong long int Request::DeviceID(正如原始标题所暗示的那样,在它被更改之前),转换隐式发生:

request.DeviceID = DeviceID;

但是,从您的代码来看,request.DeviceID是一个指针。这几乎肯定不是你想要的,但如果是,那么它将需要一个正确类型的值来指向,例如

long long int DeviceIDValue = DeviceID;
request.DeviceID = &DeviceIDValue;

您可以通过取消引用指针来访问该值:

cout << "DEVICE ID: " << *request.DeviceID << " " << *request.ProdReqID << " " << endl;

代码中的狡猾强制转换只是绕过类型检查并创建指向错误类型的无效指针。如果(你应该)使用C++式的强制转换而不是完全邪恶的C式转换,那么你必须写reinterpret_cast,这应该敲响一个非常响亮的警钟 - 转换是无效的。

我通过将 DeviceID 和 ProdReqID 参数从 int 更改为 LONG64 然后执行以下操作来解决此问题:

request.DeviceID = &(DeviceID);
request.ProdReqID = &(ProdReqID);