简单实现了一个根据从4字节中随机取某几个字节拼成某个数据的功能,如两个字节为一个数据,等等。
#include <iostream>
#include <vector>
#include <unordered_map>
#include <memory>
#include <future>
#include <semaphore>
#include <bit>
#include <bitset>
using namespace std;
using namespace std::literals;
//#include <math.h>
#define GET_LOW_BYTE0(x) ((x >> 0) & 0x000000ff) /* 获取第0个字节 */
#define GET_LOW_BYTE1(x) ((x >> 8) & 0x000000ff) /* 获取第1个字节 */
#define GET_LOW_BYTE2(x) ((x >> 16) & 0x000000ff) /* 获取第2个字节 */
#define GET_LOW_BYTE3(x) ((x >> 24) & 0x000000ff) /* 获取第3个字节 */
#define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) /* 获取第bit位 */
std::bitset<32>data_byte_arr;
//template<class _Ty>
char get_num_byte(int & x, int num_byte)
{
switch (num_byte)
{
case 0:
return GET_LOW_BYTE0(x);
case 1:
return GET_LOW_BYTE1(x);
case 2:
return GET_LOW_BYTE2(x);
case 3:
return GET_LOW_BYTE3(x);
default:
break;
}
}
int unpack(int*data,char *pbuff)
{
memcpy(data, pbuff, sizeof(int));
return sizeof(int);
}
void calculate(int get_byte_num,int* data)
{
for (int i = 0; i < get_byte_num; ++i)
{
char c = get_num_byte(*data, i);
for (int j = 0; j < 8; ++j)
{
data_byte_arr[j+i*8]=((c >> j) & 1);
}
}
}
int main()
{
int testdata1 = 0x1F4;
//short testdata = 0x1F4;
calculate(2, &testdata1);
//取四字节
//int data_1;
//offset += unpack(&data_1, arr);
//for (int i = 1; i < 3; ++i)
//{
// char c=get_num_byte(test, i);
// for (int i = 0; i < 8; i++)
// {
// data_length[i + 8] = ((c >> i) & 1);
// cout << data_length[i] << endl;
// }
//}
// //每次取一字节
// C= GET_LOW_BYTE0(test);
// int b[8];
// for (int i = 0; i < 8; i++)
// {
// data_length[i ] = ((c >> i) & 1);
// cout << data_length[i] << endl;
// }
// int data_length_res = data_length.to_ulong();
// //取第二个字节
// c = GET_LOW_BYTE1(test);
// for (int i = 0; i < 8; i++)
// {
// data_length[i+8] = ((c >> i) & 1);
// cout << data_length[i] << endl;
// }
// int data_length_res2 = data_length.to_ulong();
return 0;
}