我有一个问题,我想把一个uint8_t[]
数组作为参数传递给一个定义为typedef void(*dangerousC)(void*)的函数指针;另外,我使用Windows API头。 假设变量
raw是由
GetProcAddress()返回的函数指针。还假设编译器不知道
foo()`的参数。
下面是完整的代码:
#include <iostream>
#include <Windows.h>
typedef void (*dangerousC)(char*);
void foo(int a) {
std::cout << a << std::endl;
}
int main() {
auto raw = (FARPROC) foo;
auto* b = new uint8_t[4];
b[0] = 74;
b[1] = 35;
b[2] = 0;
b[3] = 0;
std::cout << *(int*)b << std::endl;
auto func = (dangerousC)raw;
func(reinterpret_cast<char *>(*b));
delete[] b;
}
当我用参数reinterpret_cast<char *>(*b)
调用函数指针时,我只得到一个字符,这在我解引用指针时是合理的。
但我也尝试了一个指针,它不打印的结果,我想,这是9034。
我怎样才能使函数打印9034并将字节数组完全解释为32位int?
2条答案
按热度按时间7uhlpewt1#
foo()
需要一个int
,但你传递给它的是一个char*
。因此,你需要传入一个char*
,它的 value 是你想要的整数,而不是一个指向整数的实际指针。Online Demo
vzgqcmou2#
通常是这样做的,因为我从你的评论理解正确,你处理字节流