我不擅长高级C++脚本。我试图找出下面的变量赋值更多的信息,但没有成功。请解释一下它们或给我一个类似语句的学习来源。
rand_seed = *(int*)input_buffer_ptr;
moving_input_ptr = (BYTE*)((int*)input_buffer_ptr + 1);
RAM: .... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
SOME_TYPE*
表示指向某个字节的指针:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
^
input_buffer_ptr
int*
表示您将此指针下的数据视为整数(4字节大小的数字)
因此,如果您有指针 SOME_TYPE* input_buffer_ptr
(int*)input_buffer_ptr; // casts this pointer to int*,
//so now you treat data under this pointer as 4 bytes integer
那么:
*(int*)input_buffer_ptr; // operator * before pointer gets data under
//that pointer, in this case, integer (4 bytes).
所以,rand_seed
是一个整数,并且有以下值:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
| random_seed |
然后:
(int*)input_buffer_ptr + 1
// ^ ^
// casting to int* moving pointer to size of int (4 bytes)
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
^
((int*)input_buffer_ptr + 1)
接着:
(BYTE*)((int*)input_buffer_ptr + 1);
// ^
// casting pointer to BYTE*, so it points to the same place
// but now treated as one byte pointer.
如果您尝试以下操作:
BYTE a = *(BYTE*)((int*)input_buffer_ptr + 1);
您将获得一个值为:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
| a |
int
写入的,否则这是未定义行为(严格别名违规)。 - M.M
input_buffer_ptr
指针转换为int *
之后,提取第一个项目。rand_seed
应该是一个'int'。 - J. Piquard