Я хочу передавать данные по битам, чтобы я имел доступ к данным с переменной char *. вот мой код.
int main()
{
//initiate int variable and casting with char*
int a = 65;
cout << a << endl;
char* p = reinterpret_cast<char*>(&a);
cout << "------------------" << endl;
//check char* p is pointing &a
cout << &a << endl;
printf("0x%x\n", p);
cout << "------------------" << endl;
//access int variable with byte unit
cout << (int)*(p + 0) << endl;
cout << (int)*(p + 1) << endl;
cout << (int)*(p + 2) << endl;
cout << (int)*(p + 3) << endl;
cout << "------------------" << endl;
//initiate int variable and assemble with char* access in way 1
int* b = new int(0);
*b = *(p + 0) << 24;
*b += *(p + 1) << 16;
*b += *(p + 2) << 8;
*b += *(p + 3);
cout << *b << endl;
cout << "------------------" << endl;
//initiate int variable and assemble with char* access in way 2
*b = *(p + 0);
*b += *(p + 1) << 8;
*b += *(p + 2) << 16;
*b += *(p + 3) << 24;
cout << *b << endl;
return 0;
}
и выводим его следующим образом.
65 -> variable a is 65
------------------
0x61ff04
0x61ff04 -> char* p is pointing right
------------------
65
0
0
0 -> access with byte unit
------------------
1090519040 -> way 1
------------------
65 -> way 2
, когда я получаю доступ к данным по байтным единицам, эти данные, указывающие на первый адрес, показывают «65», так что я думаю, что эта система big endian.
, поэтому я подумал, что если я хочу передать данные 'a' в переменную 'b', тогда данные * (p + 0) должны быть go в первую очередь как способ 1, но результат не не правильно. * (p + 0) go в конце - способ 2, покажите правильное значение.
в простом смысле, я думаю, что я передавал данные в прямой памяти, чтобы указать, как это
variable a => variable b
[0x000000] => [0x100000]
[0x000001] => [0x100001]
[0x000002] => [0x100002]
... => ...
Я не знаю, почему это произошло. Кто-нибудь может объяснить по этому поводу?
==================================== =============================================
проблема была решена. система не была порядочной. я ошибся.