BYTE data[2],请问我怎么把9999赋给他呢???知道怎么写,不懂BYTE 类型用法,大家帮忙,谢谢!

解决方案 »

  1.   

    int i=9999;memcpy(data,&i,sizeof(int));
      

  2.   

    sizeof(int))会溢出的
    类型用short或WORD即可
      

  3.   

    int型占4个字节,byte只有两个
      

  4.   

    BYTE类型一个字节,
    int类型四个字节
    你的BYTE数组只有两个字节,可以这么做:
    *((WORD *)data) = 9999;
      

  5.   

    data[0] = 0x99;
    data[1] = 0x99;
      

  6.   

    Up 回复人: zhangnanonnet(鱼欢) ( ) 信誉:179  2005-04-22 13:52:00  得分: 0  
     
     
       data[0] = 0x99;
    data[1] = 0x99;
      
     
    你这样不对吧。
    9999(10) ==> 270F (16进制)
    照你的写,该是
    data[0] = 0x0f
    data[1] = 0x27
    这样吧
      

  7.   

    *((WORD *)data) = 9999;这是正解.
      

  8.   

    byte是一个字节,short是两个字节,但是byte是无符号的,所以应该是
    *((unsigned short *)data) = 9999;又因为9999小于32767,所以*((short *)data) = 9999;也可以,但是第一种是完全等价的,第二种严格来说是错误的
      

  9.   

    我觉得还是楼主对需求说得不是太明确,这样吧,一般我都是这么转换的,不过是字符串和HEX之间的转换,对字符串再作一次转换就可以了,HEX和字符串之间的转换我写了2个函数:
    // 转换2字节16进制的字符串到ASCII字符串
    BOOL HextoAscii(char* sHex,char* sReply)
    {
    int iLen,i,j=0;
    BYTE * lsData;
    BYTE * lsReply; if(sHex==NULL)
    {
    return FALSE;
    }
    iLen=strlen(sHex);
    if((iLen%2!=0)||(iLen>1024))
    {
    return FALSE;
    }
    if(sReply==NULL)
    {
    return FALSE;
    } iLen=strlen(sHex);
    lsData=new BYTE[iLen];
    lsReply=new BYTE[iLen/2+1];
    memcpy(lsData,sHex,iLen);
    for(i=0;i<iLen;i+=2)
    {
    if(((lsData[i]>='0'&&lsData[i]<='9')||
    (lsData[i]>='a'&&lsData[i]<='f')||
    (lsData[i]>='A'&&lsData[i]<='F'))&&
    ((lsData[i+1]>='0'&&lsData[i+1]<='9')||
    (lsData[i+1]>='a'&&lsData[i+1]<='f')||
    (lsData[i+1]>='A'&&lsData[i+1]<='F'))
    )
    {
    if(lsData[i]>='0'&&lsData[i]<='9')
    lsReply[j] = lsData[i]-'0';
    if(lsData[i]>='a'&&lsData[i]<='f')
    lsReply[j] = lsData[i]-'a'+10;
    if(lsData[i]>='A'&&lsData[i]<='F')
    lsReply[j] = lsData[i]-'A'+10;
    lsReply[j]=(lsReply[j]<<4)&0xf0;
    if(lsData[i+1]>='0'&&lsData[i+1]<='9')
    lsReply[j] |= lsData[i+1]-'0';
    if(lsData[i+1]>='a'&&lsData[i+1]<='f')
    lsReply[j] |= lsData[i+1]-'a'+10;
    if(lsData[i+1]>='A'&&lsData[i+1]<='F')
    lsReply[j] |= lsData[i+1]-'A'+10;
    j++;
    }
    else
    break;
    }
    lsReply[j]=0x00;
    memcpy(sReply,lsReply,j+1);
    delete lsReply;
    delete lsData;
    return TRUE;
    }// 转换ASCII字符串到2字节16进制的字符串
    BOOL AsciitoHex(char* sAsc,int iLength,char* sReply)
    {
    int i,j=0;
    BYTE ch1,ch2;
    BYTE * lsData;
    BYTE * lsReply; if(sAsc==NULL)
    {
    return FALSE;
    }
    if(iLength>512)
    {
    return FALSE;
    }
    if(sReply==NULL)
    {
    return FALSE;
    } lsData=new BYTE[iLength];
    lsReply=new BYTE[iLength*2+1];
    memcpy(lsData,sAsc,iLength);
    for(i=0;i<iLength;i++)
    {
    ch1=lsData[i]>>4; //高四位
    ch2=lsData[i]&0x0f; //低四位
    lsReply[j++]=(ch1>=0&&ch1<=9)?(ch1+0x30):(ch1+0x37);
    lsReply[j++]=(ch2>=0&&ch2<=9)?(ch2+0x30):(ch2+0x37);
    }
    lsReply[j]=0x00;
    memcpy(sReply,lsReply,j+1);
    delete lsReply;
    delete lsData;
    return TRUE;
    }
      

  10.   

    例子:
    BYTE data[2];
    char str[5];
    int i = 9999;memset(data, 0, 2);
    memset(str, 0, 5);
    sprintf(str, "%d", i);AsciitoHex(data, strlen(str), (char *)data);虽然较比的麻烦,但应该是楼主想要的答案
      

  11.   

    首先确定你要保存的数据不能多于两个字节,因为BYTE data[2]只有两个字节,多于两个字节的数据,有可能两个字节不能存储,为什么说有可能呢?比如int i ;i占四个字节,但是当i小于某个值时,这四个字节的高两字节是0,所以可以强制转换为两个字节而不丢失数据,但是,如果高两字节中有数据,这是就会丢失数据。
    如果不考虑数据丢失,操作如下:
    int i;
    *((short*)data) = i;
    因为int 类型有符号,所以上面可以用两个字节有符号类型,short int和signed short int与short 等价,当然,你也可以用__int16;
    总之,要注意两件事情,1,是否有数据截断;2,是否需要符号(-)
      

  12.   

    因为我总认为,如果要象*((WORD *)data) = 9999;那又何必用byte数组呢
      

  13.   

    int i = 9999;
    BYTE b[2];
    b[0] = i % (0xff+1);
    b[1] = i / (0xff+1);