[英]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
变量,如果buffer
或size
发生更改,它将不会更新其值。 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.