大家新年好!void Chg4(unsigned int *p)
{
    unsigned int a;
a = (*p&0xff)<<24 | (*p&0xff00)<<8 | (*p&0xff0000)>>8;
*p >>=24;
*p |= a;
}
散点,来者有分。

解决方案 »

  1.   

    在主函数里调用Chg4(&b);
    void main(void)
    {
        unsigned int b;
        b=0x12345678;
        Chg4(&b);
        printf("value=%d",a);
    }
    那么a=0x78000000 | 0x00560000 | 0x00003400;
    b=0x00000012;
    b|=a;也就是b=(0x00000012 | 0x78000000 | 0x00560000 | 0x00003400);
      

  2.   

    a = (*p&0xff)<<24 | (*p&0xff00)<<8 | (*p&0xff0000)>>8;
    代码风格不好,可以拆成多行
      

  3.   


    支持这个!  还是 多行更利于排除bug
      

  4.   

    改变字节序的,为啥不直接用htonl?
      

  5.   

    是编绎器的事,和编绎器的优化程度有关,同时中国大多数公司都不买正版的,全是用盗版的软件或免费的开源软件,因些虽然语法和逻辑没问题,但编绎后的结果就是不对,只能分多行写才行,我想只要用过开源免费的软件肯定能碰上这种情况,比如WINAVR这个软件,用来编绎AVR单片机的编绎器,当初一个高版本的编绎后执行就是不对,只能用低版本的才行,这决不是程序有问题.
      

  6.   


    养成良好的代码风格确实很重要,不知这样改:
    a = ((*p&0xff)<<24) | ((*p&0xff00)<<8)| ((*p&0xff0000)>>8);
    后,还会不会出问题(我只是将已知的优先关系用括号括起来)?
      

  7.   

    int类型的大小端字节顺序转换。  LZ多多多多多多多多多多多多多多多多多多多多多多多多多给我分