将静态无符号字符* 分配给 std::vector<无符号字符>

Assign Static unsigned char* to std::vector<unsigned char>

本文关键字:字符 无符号 vector lt gt 静态 分配 std      更新时间:2023-10-16

我的代码中有以下内容:

static unsigned char* table;
...
table = something here;

现在我必须将此table分配给类型为 std::vector<unsigned char> 的变量,但我无法这样做。我正在做:

unsigned char* buffer = (unsigned char*) table;
std::vector<unsigned char>::size_type size = strlen((const char*)buffer);
std::vector<unsigned char>static rawTable(buffer, buffer + size);
for(ByteBuffer::iterator it=rawTable.begin();it!=rawTable.end();++it)
    std::cout << "Raw Table: "<<*it<< std::endl;

我能够编译代码,但 rawTable 中没有值。请帮忙!我已经验证了变量table具有价值。我感谢这方面的任何帮助。谢谢。

strlen为您提供字符串的长度,而不是任意内存区域的大小。 如果您的table里面有''strlen会找到它并停止计数。

此外,通过将rawTable作为static变量,如果buffersize发生变化,它将不会更新其值。 static变量仅构造一次。

此外,如果这应该是数字数据表,则应强制转换为数字非字符类型。 否则,cout可能会将其解释为 ASCII 代码。

您有一个指向数组的 unsigned char* 类型的指针。

然后你想把数组的每个元素都推到一个std::vector<unsigned char>,对吧?

如果是这样,关键是要知道数组的大小。您需要事先知道尺寸。在一般情况下,如果您看到的只是类型 unsigned char* 的指针,则无法使用某些关键字或函数确定数组的大小。您需要以某种方式将该信息与指针一起传递。

当类型为 unsigned char* 的指针指向以 null 结尾的字符数组时(例如 {'f', 'o', 'o', ''} ),则可以使用 C 字符串函数strlen仅使用指针来计算数组中的字符数。但是,如果数组未以 null 结尾,这将导致未定义的行为

当您拥有size时,使用数组元素填充std::vector是一件简单的事情:

std::vector<unsigned char> v(arr, arr + size); // arr = pointer to array.

这就是为什么您应该使用标准库中的容器而不是原始数组的原因,因为这些容器在内部跟踪大小,并且您可以随时使用 size() 函数访问它。

对于恒定大小的数组,请使用 std::array 。例:

std::array<unsigned char, 3> arr{'f', 'o', 'o'}; // arr.size() == 3
// Print its contents.
for (auto c : arr) {
    std::cout << c << std::endl;
}