有关char unsigned char和memcmp的认识
时间:2010-09-10 来源:wbshwxn
前段时间,在做张家港车载POS机的时候,遇到一个问题。
其中m_ts_price.type=0xFF, gCardType=0xFF
if(m_ts_price.type==gCardType){...}
发现没有if条件不满足,甚感诧异,仿真器跟踪的时候发现这两个变量的值都是0xFF,于是我改成了
if(memcmp(&m_ts_price.type,&gCardType,1)==0){...}却发现if条件成了
于是我找到了变量的定义如下:
typedef struct
{
char type[2];
WORD trance;
WORD time;
char index;
} STR_PRICE; STR_PRICE m_ts_price[10]; unsigned char gCardType; 这才恍然大悟,char的值是(-128---127)unsigend char是(0--255)所以这两个变量肯定是不相等的了。但是怎么memcmp是可以的啊,于是网上查了下 原理memcmp是以unsigend char对齐的 也就是说在比较的时候将char转化成了unsigned char。 看来的我C还有待提高!!!
{
char type[2];
WORD trance;
WORD time;
char index;
} STR_PRICE; STR_PRICE m_ts_price[10]; unsigned char gCardType; 这才恍然大悟,char的值是(-128---127)unsigend char是(0--255)所以这两个变量肯定是不相等的了。但是怎么memcmp是可以的啊,于是网上查了下 原理memcmp是以unsigend char对齐的 也就是说在比较的时候将char转化成了unsigned char。 看来的我C还有待提高!!!
相关阅读 更多 +