【发布时间】:2019-05-07 10:48:54
【问题描述】:
我正在尝试取一个给定的 3 位值并将 3 位值存储到 unsigned char 数组 [3],以下是我的示例,数组值以二进制显示以便于理解,有谁知道会是什么更好的方法来实现这个功能?
例如:
unsigned char array[3] = {0};
function_store_3bits_value(3);
array[0] = 011 000 00b
array[1] = 0 000 000 0b;
array[2] = 00 000 000b;
function_store_3bits_value(7);
array[0] = 011 111 00b
array[1] = 0 000 000 0b;
array[2] = 00 000 000b;
function_store_3bits_value(5);
array[0] = 011 111 10b
array[1] = 1 000 000 0b;
array[2] = 00 000 000b;
function_store_3bits_value(2);
array[0] = 011 111 10b
array[1] = 1 010 000 0b;
array[2] = 00 000 000b;
function_store_3bits_value(1);
array[0] = 011 111 10b
array[1] = 1 010 001 0b;
array[2] = 00 000 000b;
function_store_3bits_value(6);
array[0] = 011 111 10b
array[1] = 1 010 001 1b;
array[2] = 10 000 000b;
function_store_3bits_value(7);
array[0] = 011 111 10b
array[1] = 1 010 001 1b;
array[2] = 10 111 000b;
【问题讨论】:
-
“更好的方式”表示你已经实现了这个功能的一个版本——请贴出来。
-
除非您有非常严格的内存使用要求,否则我不会费心用完所有位。我只会将一个或两个三位值放在单个字符中(也许 wchar 中有 5 个三位值,所以你只浪费 1 位用于填充)。这样您就不必费心打破多个字节之间的值。
-
还要注意,如果您将这个 3 字节数组与任何其他对象打包在一起,则该对象可能会被填充以适应它需要的对齐方式,从而浪费至少 1 个字节。当然,如果这 3 个字节构成更大的 3 位计数器数组的一部分,那么这不是问题。
-
如果你真的想把一些小的计数打包成一个整数,看看旧的 c 位字段结构特性。 en.cppreference.com/w/cpp/language/bit_field
-
C还是C++,请下定决心,答案会不一样