将静态无符号字符* 分配给 std::vector<无符号字符>
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
里面有' '
,strlen
会找到它并停止计数。
此外,通过将rawTable
作为static
变量,如果buffer
或size
发生变化,它将不会更新其值。 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;
}
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中