我不擅长高级C ++脚本。我试图找到更多有关以下变量赋值的信息,但没有成功。请解释一下或给我一个研究类似陈述的来源。
rand_seed = *(int*)input_buffer_ptr;
moving_input_ptr = (BYTE*)((int*)input_buffer_ptr + 1);
答案 0 :(得分:2)
(考虑到RAM: .... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
是4个字节)
想象一下RAM作为一长串字节(因为它是):
SOME_TYPE*
和.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
^
input_buffer_ptr
作为某个字节的指针:
int*
SOME_TYPE* input_buffer_ptr
表示您将此指针下的数据视为整数(大小为4字节的数字)
所以如果你有指针(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 |
您将获得一个带有值的字节变量:
while (str.length() > i && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
result = result * 10 + (str.charAt(i) - '0');
i++;
}