繁体   English   中英

将静态未签名的char *分配给std :: vector <unsigned char>

[英]Assign Static unsigned char* to std::vector<unsigned char>

我的代码中包含以下内容:

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内部任何位置都有'\\0' ,则strlen会找到它并停止计数。

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

另外,如果应该使用数字数据表,则应将其转换为数字非字符类型。 否则cout可能会将其解释为ASCII码。

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

然后,您想将数组的每个元素推入std::vector<unsigned char> ,对吗?

如果是这样,关键是要知道数组的大小 您需要事先知道尺寸。 如果对您可见的全部是unsigned char*类型的指针,则通常无法使用某些关键字或函数来确定数组的大小。 您需要以某种方式将信息与指针一起传递。

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

当您具有size ,只需使用arrays元素填充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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM