c++ - 如何将 16 位 unsigned int 转换为 8 位 unsigned char 并最终返回 unsigned char*?

标签 c++ c++11 stdvector unsigned-integer unsigned-char

我有一个 8 位 unsigned char vector 和一个 16 位 unsigned short vector

std::vector<unsigned char> eight_bit_array;
std::vector<unsigned short> sixteen_bit_array;

sixteen_bit_array.resize(x_number_of_samples);
eight_bit_array.resize((x_number_of_samples)*2);

我已将一些数据填充到 sixteen_bit_array 中。这很酷。 我想知道是否可以将 sixteen_bit_array 类型转换并存储到 eight_bit_array 中,以及如何实现?

我有一个方法通过返回指向 unsigned char 的指针来返回 eight_bit_array,如下所示:

// A legacy method which returns the char array
unsigned char *GetDataSample(std::size_t sample_number) {
    return &eight_bit_array[sample_number];
}

所以我想将 sixteen_bit_array 类型转换并存储到 eight_bit_array 中,这样我就可以返回 16 位无符号整数,而无需更改我的遗留方法的返回类型从 unsigned char *unsigned short *

请建议如何执行此操作。

最佳答案

你可以做一些 memcpy 魔术,但你需要确保你的类型实际上分别是 8 位和 16 位:

#include <cstdint>
#include <vector>
#include <cstring>

int main() {
    std::vector<uint16_t> uint16vals{11, 1, 0, 3};
    std::vector<uint8_t> uint8vals(uint16vals.size() * 2);
    std::memcpy(&uint8vals[0], &uint16vals[0], sizeof(uint16_t) * uint16vals.size());
}

关于c++ - 如何将 16 位 unsigned int 转换为 8 位 unsigned char 并最终返回 unsigned char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024325/

相关文章:

c++ - 指向可能不存在的对象的指针 vector

c++ - unique_ptr 的临时只读拷贝

c++ - 从随机单词中删除重复的字符

C++ stringstream >> int 返回零

c++ - 使用之前在 if 语句中定义的变量

c++ - 如何从 C++ 中的字符串数组中提取整数

c++ - vector 相关的内存分配问题

c++ - 为什么我在读取二进制文本时会得到 unicodeand 大数字?

c++ - 在 C++ 中对大量元素进行分组的最快方法

c++ - 基于基类方法的生成类中的运算符重载