【问题标题】:Converting int array to uint8 [closed]将 int 数组转换为 uint8 [关闭]
【发布时间】:2023-04-05 04:30:01
【问题描述】:

我有一个在循环中返回布尔值(8 次)的函数,我想构造一个 uint8_t,你可能猜到我是 C 和 C++ 新手。

    unsigned int data[8];
    
    for(int i = 0; i < 8; i++) {
        // 1 or 0 if switch is on or off
        int value = (int)functionThatReturnsBool(i);
        data[i] = value;
    }
    
    // Needs B00000000 (with the correct switches on)
    functionThatNeeds(uint8_t ???);

【问题讨论】:

  • 先定义如何将数组中的值转换为uint8_t值。
  • 只需使用位掩码,根据布尔值设置对应的位即可。
  • 我不清楚你到底想达到什么目标,但听起来std::bitset 可能对你有用。

标签: c++ bit-shift uint8array


【解决方案1】:

尚不完全清楚您要在这里做什么,但如果您想将 8 个bools 打包成一个uint_8,这样的事情应该很容易做到:

uint8_t packed = 0;
for(int i = 0; i < 8; ++i)
    packed = (packed << 1) | functionThatReturnsBool(i);

functionThatNeeds(packed);

【讨论】:

  • 这几乎就是我的建议。我想在第一次迭代期间将压缩左移一点是无关紧要的,因为它已初始化为零。
【解决方案2】:

正如其他人所提到的,不清楚应该如何在结果字节中设置您的标志。

此示例假定 'i' 指的是位索引。

uint8_t bits = 0x00;

for ( int i = 0; i < 8; i++ ) {
    if ( functionThatReturnsBool( i ) ) {
        bits |= 1 << i ;
    }       
}

functionThatNeedsBits( bits ) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多