繁体   English   中英

在C ++中将指针表示为字符串的最佳可移植方式是什么?

[英]What's the best portable way to represent pointer as string in C++?

我需要将指针表示为用户的字符串。 有时可能会将值保存到文件并传输到具有不同体系结构的计算机(当前主要问题是32对64位)并从文本文件加载以进行比较 - 我只是将加载的值相互比较,但我仍然喜欢比较数字而不是字符串。

我目前正在使用:

SomeClass* p;
...
printf("%ld", (uintptr_t)p);

但我想知道这是否可移植(Windows和Linux在这个阶段只是重要的),以及一旦128位系统出现这是否会破坏?

编辑 :除非我决定使用uint64_t,并确定64位是屋顶,否则无法完成,因为某些64位指针可能超出32位整数范围。 所以,我认为比较字符串会更安全,即使它更慢。

对于指针,总是使用%p ---这是一个专门用于以正确格式打印指针的格式说明符。 :-)

我这样做:

std::cout << p;

如果您的心脏设置在cstdio上:

printf("%p", p);

printf有%p格式化程序,我认为是标准化的:

printf( "%p", p );

但是当你使用C ++时,ostreams已经重载了指针输出:

#include <iostream>
using namespace std;;

class A {};

int main() {
    A a;
    cout << &a << endl;
}

生产:

0x22ff6f

你在寻找%p格式化字符串吗?

printf("%p", p);

这将给出指针所指向的十六进制编码地址(并且,我认为,也会为您设置NULL s格式)。

它也可以作为

printf(“%#x”,p);

这将确保跨平台的类似格式(0x ...)。

我会做的:

cout << p << endl;

字符串(具有相同编码)是可移植的。 如果要将它们作为指针进行比较,则必须首先将字符串解析为unsigned long

至于128位系统,它们还有很长的路要走。 对于64位,您可以直接寻址1680万TB的RAM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM