本帖最后由 jimever 于 2013-10-25 16:58:41 编辑

解决方案 »

  1.   


    #include <stdio.h>typedef unsigned char uchar;void swap(uchar *c1, uchar *c2)
    {
    uchar t = *c1;
    *c1 = *c2;
    *c2 = t;
    }void display(uchar *arr, int len)
    {
    int i;
    for(i = 0; i < len; i++)
    printf("0x%02X ", arr[i]);
    putchar('\n');
    }void displayShort(short *arr, int len)
    {
    int i;
    for(i = 0; i < len; i++)
    printf("0x%04X ", arr[i]);
    putchar('\n');
    }int main()
    {
    char recv[]={0x35,0x5D,0x03,0xE6}; display(recv, sizeof(recv)); swap(&recv[0], &recv[1]);
    swap(&recv[2], &recv[3]); display(recv, sizeof(recv));
    displayShort((short*)recv, sizeof(recv)/sizeof(short)); return 0;
    }
    /*
    运行结果:
    D:\profile\Desktop\test\c>a
    0x35 0x5D 0x03 0xE6
    0x5D 0x35 0xE6 0x03
    0x355D 0x03E6
    */
      

  2.   


    #define MAKESHORT(a,b) ((unsigned short)(((LONG)a<<8))|((LONG)b& 0xff))int _tmain(int argc, _TCHAR* argv[])
    {
    char recv[]={0x35,0x5D,0x03,0xE6};
    unsigned short pShort = 0;
    char a,b;
    for (unsigned int i = 0 ; i < sizeof(recv)/sizeof(short); i++)
    {
    a = recv[i*2];b = recv[i*2+1];
    pShort =  MAKESHORT(a,b);
    printf("十进制为 %d  ",pShort);
    printf("十六进制 %x\r\n",pShort);
    }
    getchar();
    return 0;
    }
      

  3.   

    写一个联合体不就行了嘛,还不用去考虑大端法和小端法。typedef union _tagUnion
    {
    short nCombin;
    struct 
    {
    char nFst;
    char nSec;
    }SEP;}OUT, *POUT;
    int main()
    {
    OUT out;
    out.nFst = 0x35;
    out.nSec = 0x5D;
    printf("%d\n", out.nCombin); out.nFst = 0x03;
    out.nSec = 0xE6;
    printf("%d\n", out.nCombin); return 0;
    }
      

  4.   

    有个地方写错了:typedef union _tagUnion
    {
    unsigned short nCombin;
    struct 
    {
    char nFst;
    char nSec;
    }SEP;}OUT, *POUT;
    int main()
    {
    OUT out;
    out.SEP.nFst = 0x35;
    out.SEP.nSec = 0x5D;
    printf("%d\n", out.nCombin); out.SEP.nFst = 0x03;
    out.SEP.nSec = 0xE6;
    printf("%d\n", out.nCombin); return 0;
    }
      

  5.   

    char recv[]={0x35,0x5D,0x03,0xE6};short x1=((short)recv[0]<<8)|(recv[1]&0xFF);
    short x2=((short)recv[2]<<8)|(recv[3]&0xFF);
    printf("%d    %d\n",x1,x2);
      

  6.   

    方法二:
    char   recv[4]={0x35,0x5D,0x03,0xE6};
    char   val[4];
    int    i;
    short  *x=(short *)val;for(i=0;i<4;i+=2)
    {
    val[i]=recv[i+1];
    val[i+1]=recv[i];
    }printf("%d    %d\n",*x,*(x+1));