我想用它返回应该包含8个比特的信息,在小尾数格式的uint32_t
功能位。可能有人给我如何提取从uint32_t
型这些位为字符,布尔值或到任何其他类型不需要使用部队来处理一些C++代码!因为现在我没有耐心来理解整体概念。而更多的我浅搜索您的理解更为复杂,似乎...谢谢!读取uint32_t的
PS。虽然我觉得不是我所期待的,如果有人也可以张贴在一个如何能够编码8位一些代码(例如8个布尔)在uint32_t
将是有趣的,这将有助于我理解这个概念。谢谢!
我想用它返回应该包含8个比特的信息,在小尾数格式的uint32_t
功能位。可能有人给我如何提取从uint32_t
型这些位为字符,布尔值或到任何其他类型不需要使用部队来处理一些C++代码!因为现在我没有耐心来理解整体概念。而更多的我浅搜索您的理解更为复杂,似乎...谢谢!读取uint32_t的
PS。虽然我觉得不是我所期待的,如果有人也可以张贴在一个如何能够编码8位一些代码(例如8个布尔)在uint32_t
将是有趣的,这将有助于我理解这个概念。谢谢!
字节顺序不应该在这里的一个问题。你试过了吗?
小尾数是指组成uint32_t的字节具有存储在最低的内存地址中的至少显著字节,在最高最显著。当提取位时,Endian-ness不应该输入图片。如果您正在通过char *访问uint32_t变量,它只会进入图片。
#include <iostream>
#include <cstdint>
using namespace std;
int main()
{
unsigned char ch;
uint32_t u32;
bool b0, b1, b2, b3, b4, b5, b6, b7;
// If the 8 bits you need are the least significant ones then getting
// them is as easy as:
u32 = 73;
ch = u32 & 0xFF;
cout << ch << endl;
// To encode boolean variables is just as easy:
b0 = b1 = b3 = b5 = 0;
b2 = b4 = b6 = b7 = 1;
u32 = (b0 << 0) | (b1 << 1) | (b2 << 2) | (b3 << 3) | (b4 << 4) |
(b5 << 5) | (b6 << 6) | (b7 << 7);
cout << hex << u32 << endl;
return 0;
}
当访问一个变量,它会自动由系统(在86的情况下,小端)的默认字节顺序加载的,所以如果你想低8位,只敷个面膜和获取值
x = someint32 & 0xff;
同样地,分配char
成int
,或使用它在表达将扩展(有符号或零依赖于炭的signess),字节序不应该在这里是一个问题。如果您想直接访问内存,则只应该注意字节顺序。
在C A样品,使用union
来强制的整数,并且在相同的地址空间组合的位的值以及与位域b0..b7
持有单个比特值:
#include <stdio.h>
union Bitfields {
unsigned int as_int;
struct {
unsigned char b0:1,b1:1,b2:1,b3:1,
b4:1,b5:1,b6:1,b7:1;
} as_bit;
};
int main (void)
{
Bitfields bitfield;
bitfield.as_int = 73;
printf ("%u %u %u\n", bitfield.as_int, bitfield.as_bit.b0, bitfield.as_bit.b1);
return 0;
}
这允许容易读/写访问到整数值和每个独立的位,任何更方便。
嗯,我已经尝试“推”uint32_t到一个字符串流并从中获取一个字符串,但我得到的字符串只包含一个零。所以我想它不能正确提取这些位。 – venkman
你典型的stringstream不应该提取位。只是为了记录:我们在说什么语言?有关位函数的引言,另请参见[位操纵](http://en.wikipedia.org/wiki/Bit_manipulation)。 – usr2564301