大家好,我面临另一个问题,我正在研究单个位并从ascii文本中提取数据。问题是编译器给我一个错误,关于将char(8位)强制转换为4位内存字段可能会改变其值。
显然,这是事实,但是我该如何克服该错误呢?
typedef struct {
struct {
unsigned int type: 4;
unsigned int uid: 8;
unsigned int operation: 4;
unsigned int reg: 16;
}header;
char *arg_nm;
} OWL_request;
完整的错误:
error: conversion to 'unsigned char:4' from 'char' may alter its value [-Werror=conversion]
这是作业
request.header.type = (char)(j[0]-65);
j
是 *char
我要做的是摆脱错误而不更改编译器标志
使用gcc,您可以通过将值屏蔽为您分配给的位域中的位数来摆脱警告,因为它type
是4位,所以您可以执行以下操作:
request.header.type = (unsigned)(j[0]-65) & 0xf;
(请注意,关于为什么不应该使用bitfields,您可以找到几个很好的参数,请参见此处,例如,使用纯整数和@LPs建议的位旋转)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句