gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:53:56 31 4
gpt4 key购买 nike

我有一个 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com