CString str("0x1b1be0")
void* ptr = NULL;
ここではptr = 0x1b1be0
を割り当てたいと思います。これをどのように達成するのですか?アドレスがCStringオブジェクトに格納されているポインタにアドレスを割り当てる方法は?
CString str("0x1b1be0")
void* ptr = NULL;
ここではptr = 0x1b1be0
を割り当てたいと思います。これをどのように達成するのですか?アドレスがCStringオブジェクトに格納されているポインタにアドレスを割り当てる方法は?
これを試してみてください:
CString str("0x1b1be0");
void* ptr = (void *)_tcstoul(str.GetBuffer(), 0, 0);
そして、これは純粋なCである:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *s = "0x1b1be0";
void *p = (void *)strtoul(s, 0, 0);
printf("%p", p);
return 0;
}
はCodepad上でそれを試してみてください。
注:このバージョンにはエラーチェックがありません。アイデアを実証するだけです。あなたはそのようなことは非常に疑問である行うに持つ、デバッガなどの非常に低レベルなものを書いている場合を除き
#include <sstream>
std::stringstream s;
s << "0x1234";
void* a;
s >> std::hex >> a;
Cstringクラスの代わりに、これをどのように達成できますか?char * cptr = "0x1b1be0 "、ptr = 0x1b1be0となる。 – Suri
おそらく 'sscanf'を使っているかもしれませんが、私は安全な解決法を知らないでしょう(つまり' sizeof(int)== sizeof(int *) 'と仮定しないで)。 – Kos
@Suri:質問をC++とタグ付けしました。 (私はCとC++の質問に同時にタグを付ける人たちも愛していますが、いくつかの答えをした後、彼らは実際にはある言語の答えにしか関心がありませんでしたが、もう1つ...) – Mephane
ここにコードがあります。
#include <sstream>
#include <iostream>
int main() {
void * x;
std::stringstream ss;
ss << std::hex << "0x1b1be0";
ss >> x;
std::cout << x << std::endl;
}
うーん、...
は、あなたは、ポインタが何を意味するか知っていますか?
あなたのプロセスに専用のポインタがありますか?彼らはほとんどの場合、外で意味を持ちません。
%x
書式指定子と例std::sscanf
のために使用してintptr_t
にあなたの文字列を変換します は、あなたの質問に答えるために、あなたは明らかにする必要があります。reinterpret_cast< void* >
を割り当てます。'%x'はおそらく' sizeof(int) 'を読み込むので、64ビットシステムでは4バイト、sizeof(void *)は8バイトになるので、ここでは本当に恐れがあります私たちがいくつかの移植性のない仮定でOKでない限り、私は興味があります。なぜなら、なぜデバッガの他にこれが必要なのか興味があるからです... – Kos
'scanf("%x "、&foo)' _will_write 'sizeof(int)' bytesそれ以上のものはありません)、通常はもっと多くのものが読み込まれます(例えば、「0xC0000005」は10バイトですが、「0xC0000005」は4です)。おそらく、 'printf()'によってnfusedされ、他の方向(メモリから標準出力)で動作します。 – MSalters
よく、scanfを使用しますか? – x13n
何をしようとしていますか?あなたがそのポインタで何かをするなら、それはUBである可能性が高いです。 – etarion
"今私は割り当てたい..."なぜこの課題に何か役に立つものがあると思いますか? –