я хочу передавать данные по битам, поэтому я имел доступ к данным с переменной 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», поэтому я думаю, что эта система имеет прямой порядок байтов.
поэтому я подумал, что если я хочу передать данные «a» в переменную «b», то данные * (p + 0) должны быть первыми, как способ 1, но результат неверен. *(p+0) перейти наконец - способ 2, показать правильное значение.
проще говоря, я думаю, что я передал данные в прямую память от точки к точке, как это
variable a => variable b
[0x000000] => [0x100000]
[0x000001] => [0x100001]
[0x000002] => [0x100002]
... => ...
я не знаю, почему это происходит. кто-нибудь может объяснить об этом?
============================================================================
проблема была решена. система не была с прямым порядком байтов. я ошибся.
data by bit unit
- но вы печатаете байты, а не биты. Похоже, вы захотите использовать std::ostream::write а>. Я не понимаю - объясните, что именно?why this happen
- что происходит? - person KamilCuk   schedule 28.03.2020so i think this system is big endian
- Вы уверены? Младший значащий байт (т.е.65
) идет первым.you mean that you recommend
- Не рекомендую, я не понимаю, что вы делаете и что хотите сделать. Я полагаю, что неправильно понял ваш вопрос. - person KamilCuk   schedule 28.03.2020