什么是“std :: vector <unsigned char =”“> Data = example”?</unsigned>

时间:2012-05-03 07:58:17

标签: c++

std::vector<unsigned char> Data = example

我在互联网上找到了这个,我认为它将一个未知大小的字节数组写入给定的地址,但我不完全确定。任何人都可以解释这是做什么的吗?

如果这不符合我的想法,有人可以帮我制作一个C ++函数,它将地址和字节作为参数并将它们写在那个地址上,即:

myfunction(0xaddress, {0x10, 0x11, 0x12}); // something like this

2 个答案:

答案 0 :(得分:2)

向量的=运算符将复制rvalue的内容(假设rvalue是类型为vector的类型,或者是一个类,它实现了对同一类型向量的转换)。

此处仅复制地址。

答案 1 :(得分:2)

如果要向地址写入x个字节,可以选择多个选项。

void myfunction(void* address, size_t count, const unsigned char data[])
{..}

const unsigned char bytes[] = {0x10, 0x11, 0x12};
myfunction (address, 3, bytes);

其中第二个参数count是数组的长度 或者使用可变函数:

void myfunction(void* address, size_t count, ...)
{..}

myfunction (address, 3, 0x10, 0x11, 0x12);

在所有情况下,您都需要明确地提供字节数;编译器无法从数据中推断出它。

如果你想使用矢量,这是可能的,但是你需要在调用函数之前先填充矢量,这样效率不高。

你不需要自己提供计数的唯一情况是,如果没有字节值为0,那么你可以写

void myfunction(void* address, const char* str)
{..}

myfunction (address, "\x10\x11\x12");

因为你可以使用strlen!

编辑: 此外,std::basic_string<unsigned char>值得研究。但在这里,给这个包含\x00值的值也不是一件容易的事。