Linux API读/写和C ++位集

问题描述

如何在Linux API读/写功能中使用C ++位集容器?

类似这样的东西:

#include <vector>
#include <bitset>

#include <fcntl.h>      // Linux API open
#include <unistd.h>     // Linux API read,write,close

using namespace std;

int main() {
    // Some 8-bit register of some device
    // Using vector for read and write operations.
    // Using bitset to manipulate individual bits.
    vector<bitset<8>> control_register;
    
    // Set bit 1 of control_register to 1 (true).
    control_register[0].set(1);
    
    // Open new file for writing (create file)
    int fd = 0;
    const char *path = "./test.txt";
    fd = (open(path,O_WRONLY | O_CREAT | O_Trunc,S_IRWXU));
    
    // Write to file from vector (using Linux API)
    write(fd,control_register.data(),control_register.size());
    
    // close file
    close(fd);
    
    return 0;
}

我们可以不使用向量容器立即写一个位集吗?

解决方法

您可以做的是,在写入数据之前将其转换为std::bitset。像

std::bitset<8> controlRegister = 0b00101100; // Use some consts and combine them 
                                             // with bitwise or (|) to make this more 
                                             // human readable
uint8_t ctrl = static_cast<uint8_t>(controlRegister.to_ulong() & 0xFF);

write(fd,&ctrl,1);