如何从int转换为long long int *?

时间:2012-09-21 16:38:16

标签: c++ casting

我试过了:

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

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

3 个答案:

答案 0 :(得分:3)

如果DeviceIDProdReqIDintrequest.DeviceIDrequest.ProdReqIDlong long int,请执行以下操作:

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

使用演员表演甚至:

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

使用类型促销。

答案 1 :(得分:1)

您没有说明实际上是什么类型,但假设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,这应该响起一个非常响亮的警钟 - 转换无效。

答案 2 :(得分:0)

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

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