首页 > 解决方案 > Solidity:检查是否在 bytes24 中设置了特定位

问题描述

我正在尝试在 Solidity 中实现一个函数,该函数检查某个位置的位是否已设置,即我想要一个函数,例如:

function isBitSet(bytes24 b, uint pos) returns (bool){
    return ...
}

我试图将这种方法转移到 Solidity:Checking if a bit is set or not

function isBitSet(bytes24 b, uint pos) returns (bool){
    return (b & (1 << pos)) != 0;
}

但是,这不起作用,因为(1 << pos)返回类型uint256...

标签: ethereumsoliditybit-shiftbitwise-and

解决方案


function isBitSet(bytes24 b, uint pos) internal view returns (bool){
    return (  bytes32(b) & bytes32(1 << (pos+64)) ) != 0;
}

推荐阅读