如何在c ++中将char *指针地址转换为int

时间:2015-10-20 09:14:47

标签: c++ reinterpret-cast

如何将char *地址转换为int? 在cygwin中,我得到了如下错误:

test.cpp:31:80:错误:从'char *'到'int'的转换损失精度[-fpermissive]    cout<< "己烷:0X" << setw(8)<<左<< hex<<的reinterpret_cast(安培; PChar类型[I])

(翻译:错误,从'char *'到'int'的转换将失去精度)

以下是我的源代码:

int main()
{
    int num = 0x12345678;
    char *pchar = reinterpret_cast<char*>(&num);
    if (0x12 == *pchar)
    {
        cout << "big-end" << endl;
    }
    else if (0x78 == *pchar)
    {
        cout << "little-end" << endl;
    }
    else
    {
        cout << "wtf" << endl;
    }
    for (int i = 0; i < 4; ++i)
    {
        cout << "hex:0x" << setw(8) << left << hex << reinterpret_cast<int>(pchar + i)
            << "val:0x" << hex << static_cast<int>(pchar[i]) << endl;
    }



    return 1;
}

1 个答案:

答案 0 :(得分:4)

你不能:行为将是 undefined 。这是因为char*int无关。

在您的情况下,为什么不使用%p作为指针的格式说明符? (严格来说,您应该将参数转换为void*const void*)。

cout会自动为您执行此操作:

cout << (void*)(pchar);