Matrix 将整数矩阵转换为位字符串?

Matrix 将整数矩阵转换为位字符串?,matrix,bit-manipulation,Matrix,Bit Manipulation,我有一个4x4整数矩阵(称为tb),我可以从int64\t位字符串(称为state)创建它,如下所示: for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { ipos -= 1; tb[i][j] = (state >> (4*_pos)) & 0xf); } } for(int i=0;i(4*_pos))&0xf); } } 但是,一旦

我有一个
4x4
整数矩阵(称为
tb
),我可以从
int64\t
位字符串(称为
state
)创建它,如下所示:

for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
        ipos -= 1;
        tb[i][j] = (state >> (4*_pos)) & 0xf);
    }   
}
for(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
首次公开募股-=1;
tb[i][j]=(状态>>(4*_pos))&0xf);
}   
}

但是,一旦我开始使用矩阵,我如何将其更改为位字符串?我希望遍历整数矩阵,得到元素,创建一个4位的十六进制表示,然后将它转换过来(
当然,按照你说的那样做,类似这样的东西(未测试)

如果您允许特殊说明,还有一种更短的方法(未测试,再次颠倒顺序)

如果您只是先反转半字节,这两种方法也适用于反转顺序,这也可以通过位操作来完成

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        pos--;
        state |= (uint64_t)tb[i][j] << (4 * pos);
    }   
}
uint64_t low, high; // inputs
uint64_t even = 0x00FF00FF00FF00FFULL;
uint64_t odd = ~even;
low = (low & even) | ((low & odd) >> 4);
high = (high & even) | ((high & odd) >> 4);
even = 0x0000FFFF0000FFFFULL;
odd = ~even;
low = (low & even) | ((low & odd) >> 8);
high = (high & even) | ((high & odd) >> 8);
low = (low & 0xFFFF) | (low >> 16);
high = (high & 0xFFFF) | (high >> 16);
return low | (high << 32);
low = _pext_u64(low, 0x0F0F0F0F0F0F0F0FULL);
high = _pext_u64(high, 0x0F0F0F0F0F0F0F0FULL);
return low | (high << 32);
low = _pdep_u64(bitstring & 0xFFFFFFFF, 0x0F0F0F0F0F0F0F0FULL);
high = _pdep_u64(bitstring >> 32, 0x0F0F0F0F0F0F0F0FULL);