Tôi cần trình bày con trỏ dưới dạng chuỗi cho người dùng. Đôi khi các giá trị có thể được lưu vào một tệp và chuyển sang máy tính có kiến trúc khác nhau (32 so với 64 bit là vấn đề chính hiện tại) và được tải từ tệp văn bản để so sánh - Tôi chỉ so sánh giá trị được tải với nhau, nhưng tôi vẫn muốn so sánh các số hơn chuỗi.Cách di động tốt nhất để biểu diễn con trỏ dưới dạng chuỗi trong C++ là gì?
Tôi hiện đang sử dụng:
SomeClass* p;
...
printf("%ld", (uintptr_t)p);
nhưng tôi tự hỏi nếu điều này là xách tay (Windows và Linux chỉ quan trọng ở giai đoạn này mặc dù), và liệu điều này sẽ phá vỡ một lần hệ thống 128-bit hiển thị?
Chỉnh sửa: trừ khi tôi quyết định sử dụng uint64_t và quyết định 64bit là tầng trên, điều này không thể thực hiện được vì một số con trỏ 64 bit có thể nằm ngoài phạm vi số nguyên 32 bit. Vì vậy, tôi quyết định rằng nó sẽ an toàn hơn để so sánh các chuỗi ngay cả khi nó chậm hơn.
Nhưng không phải di động. Ít nhất, nó không cho đầu ra phù hợp giữa các nền tảng. Trong studio trực quan, giá trị hex xuất hiện theo mũ.Trong gcc, chữ thường. – user48956
* lắc đầu * Đó có phải là sự khác biệt đáng lo ngại không? Bạn có thể _never_ có địa chỉ xuất hiện theo cùng một cách trên tất cả các nền tảng --- ví dụ: trong chương trình DOS chế độ thực 16 bit, địa chỉ thường được in ở định dạng xxxy: yyyy. (Bạn không thể loại bỏ dấu hai chấm "chỉ để nhất quán giữa các nền tảng" --- điều đó sẽ rất gây hiểu nhầm, bởi vì không gian địa chỉ trong các chương trình DOS thực sự không phẳng.) –
ví dụ: 0x11110000 và 0x11120000, trong mô hình địa chỉ bằng phẳng , cách nhau 0x10000 byte. Tuy nhiên, trong các chương trình DOS chế độ thực 16 bit, 1111: 0000 và 1112: 0000 cách nhau 16 byte. –