2
double address = 3068770752;
std::string hello = (char *)address;

エラー:タイプ「double」からタイプ「char*」への無効なキャスト

したがって、type longまたはintを使用すると、これは機能しますが、type doubleを使用すると、これは機能しません。これどうやってするの?

ありがとう!

編集:私はC ++でPHP拡張機能をプログラミングしています。これは、カスタム関数「get_memory_data(doubleaddress)」の「コンテンツ」です。使用するphpでは次のようになります。

<?php
$a = "hello";
$b = get_memaddress($a); //0x123456
$c = hextodec($b); //3068770752
$d = get_memdata($c); //hello
4

2 に答える 2

5

最初に整数にキャストします。

char * p = reinterpret_cast<char *>(static_cast<uintptr_t>(address));

std::string i_cause_undefined_behaviour(p);
于 2013-01-14T21:33:42.153 に答える
4

メモリアドレスをdoubleに格納することは意味がありません。それは、コンパイラが許可しない理由ではありませんが、確かに役に立ちません。64ビットプラットフォームでは、メモリアドレスを正確に格納するために64ビットが必要ですが、doubleは53ビットの精度しか保持できません。

メモリアドレスをハードコーディングする場合は、uintptr_tに保存する必要があります。

于 2013-01-14T21:37:38.573 に答える