如何将 16 位无符号 int 转换为 8 位无符号字符并最终返回无符号字符*?
How to convert 16 bit unsigned int to 8 bit unsigned char & finally return in an unsigned char*?
我有一个 8 位 unsigned char
s 的向量和一个 16 位 unsigned short
s 的向量
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 bit unsigned ints
,而不必将旧方法的返回类型从 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());
}
您可以使用按位运算:
std::pair<unsigned char, unsigned char> split(unsigned short n) {
// set to 0 the bit outside of a 8bit unsigned int
unsigned char low = n & (1 << 8);
// get the bit higher than 2^8
unsigned char high = n >> 8;
return {high, low};
}
(班次值应该很好,但TBH我不是100%确定(
顺便说一句,当您假设类型的大小时,请使用固定大小类型而不是依赖于实现的大小类型
编辑
要合并两个 8 位整数,您可以执行以下操作:
unsigned short split(unsigned char h, unsigned char l) {
return (h << 8) + l;
}
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 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++ 中将两位数保存在无符号字符中