按位进行相关操作
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
//typedef unsigned long long uint64_t;
uint64_t bData;
uint64_t a24;
uint64_t b24;
// 针对第几位进行与非运算,对应位置就是你想要的数据
void offset_64(uint64_t *data, long lsize_t, int byte_t)
{
*data &= ~(lsize_t << ( 8 * byte_t));
//printf("func: bData = %lld\n", *bData);
printf("%"PRIu64"\n", *data);
//printf("%lld\n", *data);
}
// 最低位异或运算结果放在第24位
void change1(uint64_t *data1, uint64_t *data2, uint64_t *data)
{
int i;
int j;
int ret;
i = *data1%2;
j = *data2%2;
*data = *data2;
ret = i^j;
*data = (*data - j) << 1;
*data &= ~(0xFFFF << 25);
*data |= ret << 24;
}
int main()
{
// static data offset
const unsigned long static_data[5] = {0x41, 0xAA, 0x42, 0xBB, 0x43};
unsigned long temp;
for(int i=1; i<=5; i++){
temp = static_data[i-1];
offset_64(&bData, temp, (8-i));
}
// switch
long input_data[3] = {0xA9, 0x41, 0x1A};
for(int j=0; j<3; j++){
offset_64(&bData, input_data[j], (2 - i));
}
printf("%"PRIu64",%lu\n", bData, sizeof(bData));
printf("-----------------------\n");
offset_64(&a24, 0xC5, 2);
offset_64(&a24, 0x41, 1);
offset_64(&a24, 0xA9, 0);
a24 &= ~(0xFFFF << 25);
printf("%"PRIu64",%lu\n", a24, sizeof(a24));
chang1(&bData, &a24, &b24);
return 0;
}
主要记录一下,c库中对于64 32 24位的在库stdint.h中有定义,这里我也直接用64改24位。
针对按位运算如果还有好方法可以留言给我。