定义了一个char buf[2];
然后有一个int nTmp = 123;要求是buf[0] 为高2位的十六进制码,
      buf[1] 为低2位的十六进制码。比如:nTmp=123时,buf[0] = 0x01, buf[1] = 0x23;
      nTmp=22时, buf[0] = 0x00, buf[1] = 0x22;
      nTmp=5678时,buf[0] = 0x56, buf[1] = 0x78;这样代码怎么写?
不是很熟,时间比较急,还请各位朋友帮助。谢谢。

解决方案 »

  1.   

    呵呵,22---->对应0x00, 0x22,这是怎么一个逻辑呢?
      

  2.   

    sprintf(buf,"%02d%02d",(int)nTmp/100,nTmp%100);
      

  3.   

    这里会溢出,定义为char buf[3]就行了。
      

  4.   

    用 HIBYET 和 LOBYTE 宏
    int a=0x1234;
    buf[0]=HIBYTE(a);
    buf[1]=LOBYET(a);
      

  5.   


    是的,这宏可用。
    但是我的nTmp是个int值,而不是十六进制的0x1234。
    那么,有没有办法将int的1234转换成十六进制的0x1234,也就是int值前面加上0x,而不是将1234转换成1234的十六进制。
    没办法,这是个串口通讯,厂家要求这样。
    对mfc的函数了解的不多,还请各位指点。
      

  6.   

    buf[0] = (char)(a>>8);
    buf[1] = (char)(a);
      

  7.   

    buf[8]={0};
    sprintf(buf, "0x%d", a);
      

  8.   

    buf如果没有限制大小的话可以这样。 char buf[8] = {0};
    int nTmp = 123;
    sprintf(buf,"%02x%02x",(int)nTmp/100,nTmp%100);
      

  9.   

    错,改下 char buf[8] = {0};
    int nTmp = 123;
    sprintf(buf,"0x%02x0x%02x",(int)nTmp/100,nTmp%100);
      

  10.   

    BCD码的处理方法有很多,这里是我以前使用位域来完成的例子struct BCDByte 
    {
    BCDByte(){}
    BCDByte(unsigned int val){operator=(val);} BCDByte & operator=(unsigned int val)
    {
    if(val > 99)
    throw exception("BCDByte::operator=, val too large! val:" + val);
    highbits = val / 10;
    lowbits = val % 10;
    return *this;
    }
    operator unsigned int() const {return highbits * 10 + lowbits;}
    operator unsigned char() const {return highbits * 10 + lowbits;}
    bool Check(){return highbits < 10 && lowbits < 10;}
    private:
    u_int8_t lowbits:4;
    u_int8_t highbits:4;
    };int main()
    {
        BCDByte bytes[2];
        int nTmp = 123;
        bytes[0] = nTmp/100;
        bytes[1] = nTmp%100;
        //自己去看内存或者打印吧
    }
      

  11.   

    有这么难么?无非就是把一个10进制的各位求出来,再按照16进制拼起来么?
    既然16位最多4位,你十进制数最大就是9999,只要把int分解成4个数,然后再拼装起来即可void parse(int i, char* buffer)
    {
       int a = i%10;
       i = i/10;
       int b = i%10;
       i = i/10;
       int c= i%10;
       int d = i/10;
       buffer[0] = d*16+c;
       buffer[1] = b*16+a;
    }
      

  12.   

    char buff[256] = {0}
    sprintf(buff,"%02d%02d",(int)nTmp/100,nTmp%100);