如何从 int 转换为长整 int*
How to cast from int to long long int*?
我试过这个:
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
我真的不知道这是否有效。 我希望看到实际数字的打印出来...
如果DeviceID
和ProdReqID
是int
,而request.DeviceID
和request.ProdReqID
是long long int
,则执行:
request.DeviceID = (long long int)DeviceID;
request.ProdReqID = (long long int)ProdReqID;
使用石膏甚至:
request.DeviceID = DeviceID;
request.ProdReqID = ProdReqID;
使用类型升级。
你没有说类型到底是什么,但假设int DeviceID
和long 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);
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度