假设我想创建一个特定长度的二进制文件,使用前4位定义类型(应允许16种不同类型),最后60位定义内容。
人们将如何继续用C进行构建?我很难找到在C中执行此操作的任何示例(正确解释了这一点)(我以前从未在这个低级别上与C一起工作过,我正试图弄湿自己……)>
我是否要创建一个char[8]
并用类似的方式手动设置每个位
/** Set bit in any sized bit block.
*
* @return none
*
* @param bit - Bit number.
* @param bitmap - Pointer to bitmap.
*
* @note Please note that this function does not know the size of the
* bitmap and it cannot range check the specified bit number.
*/
void SetBit(int bit, unsigned char *bitmap)
{
int n, x;
x = bit / 8; // Index to byte.
n = bit % 8; // Specific bit in byte.
bitmap[x] |= (1 << n); // Set bit.
}
答案 0 :(得分:1)
您可以使用类似该功能的东西来帮助您设置特定的半字节(半字节是4位数据.1字节(8位)是2个半字节,这可能会让您感到困惑)。这意味着您只需要通过您的char [x]字节,指定您需要更改字节的左侧还是右侧部分:
int set_nibble(unsigned char* dest,unsigned char src,nibble_side side)
{
if (side == left_hand )
{
*dest = ((*dest & 0x0f) | (src<<4));
return 0;
}
if (side == right_hand )
{
*dest = ((*dest & 0xf0) | (src));
return 0;
}
return -1;
}
nibble_side参数类似于
typedef enum nibble_side_t
{
right_hand, left_hand
} nibble_side;
答案 1 :(得分:1)
我将创建特定于任务的功能,仅使用蒙版即可。
torch.FloatTensor([1,0,0,0,1,0])
我将创建一个类似的函数来设置标题的每个字段。
以上假设“头四位”是指标头的第一个字节的最高有效位,而不是标头的第一个字节的最低有效位。