问题一:
int a=30;
BYTE buf;
buf = a;
结果在buf的内存中的值会自动变成1E,而我想让它的值还保持为30,该怎么做?
如果是常数的话就可以在前面加0x,但是a是变量,所以不知道怎么解决,等..... 问题二:
BYTE *V1_Normaludp;
...
V1_Normaludp获得数据并且数据长度大于512
...
BYTE *V1_Tempudp= new BYTE(512);
我想把V1_Normaludp里的数据以512为单位分割并分别存储到V1_Tempudp里面,应该怎么做?
谢谢,在线等!

解决方案 »

  1.   

    1、计算机中本身以二进制保存数据,二进制,十进制,十六进制只是表现形式不同,实际上是一样的。
    2、memcpy(V1_Tempudp, V1_Normaludp, 512);
    memcpy(V1_Tempudp, V1_Normaludp + 512, 512);
    ...........
      

  2.   

    BCD码压缩呀:把30转化成48不就得了?0x30 = 3*16 + 0*1;//多几个判断就可以
      

  3.   

    BCD码压缩呀:把30转化成48不就得了?0x30 = 3*16 + 0*1;//多几个判断就可以
    ------------------------------------
    有没有简单点的方法?
      

  4.   

    2、memcpy(V1_Tempudp, V1_Normaludp, 512);
    memcpy(V1_Tempudp, V1_Normaludp + 512, 512);
    ..................................................有没有什么方法可以memcpy一次之后就把V1_Normaludp前512的数据清空,这样每次都用
    memcpy(V1_Tempudp, V1_Normaludp, 512);就可以了, 
    还有怎么知道V1_Normaludp 数据已经拷贝到结尾了呢?有没有什么方法可以得到BYTE数据的长度的函数呢?
      

  5.   

    BYTE *V1_Normaludp;
    ...
    V1_Normaludp获得数据并且数据长度大于512
    ...
    BYTE *V1_Tempudp= new BYTE(512);
    ========================
    BYTE *V1_Tempudp= new BYTE[512];   //new 出错了吧?
    int i=0;
    while(..)   //如果V1_Normaludp还有数据没有处理,进行循环
    {
      memcpy(V1_Tempudp, V1_Normaludp+512*i, 512);
      ...   //处理 V1_Tempudp 中的512字节数据
      i++;
    }
      

  6.   

    有没有什么方法可以memcpy一次之后就把V1_Normaludp前512的数据清空,这样每次都用
    memcpy(V1_Tempudp, V1_Normaludp, 512);就可以了, 
    ==========================
    这个想法不合适,
    你可以用 memmove 进行操作,
    但是需要缓存保存原来的内容,然后移动, 繁琐,
    不如上面给的 用一个 i 记录位置。
    还有怎么知道V1_Normaludp 数据已经拷贝到结尾了呢?有没有什么方法可以得到BYTE数据的长度的函数呢?
    ========
    得在 V1_Normaludp 末尾增加一个标记,
    比如 char * 的字符串终结符
      

  7.   

    问题 1:在计算机中, 数据是没有进制这个概念的,
    比如这个  30,
    你输出的时候 %d 就是 30, %x 就是 1E,
    这个进制只是表现上的东西,
    在内存中都是 2 进制的。
      

  8.   

    BYTE数据的长度,好像没有函数可以获得。
    V1_Normaludp前512的数据清空:  V1_Normaludp += 512;
      

  9.   

    BCD码转换:30 --> 0x30: 30 / 10 * 16 + 30 % 10;  //所有的数都可以这样算
      

  10.   

    BYTE *V1_Normaludp;
    ...
    V1_Normaludp获得数据并且数据长度大于512
    ...
    BYTE *V1_Tempudp= new BYTE(512);
    ========================
    BYTE *V1_Tempudp= new BYTE[512];   //new 出错了吧?
    int i=0;
    while(..)   //如果V1_Normaludp还有数据没有处理,进行循环
    {
      memcpy(V1_Tempudp, V1_Normaludp+512*i, 512);
      ...   //处理 V1_Tempudp 中的512字节数据
      i++;
    }
      
    ======================================
    BYTE *V1_Tempudp= new BYTE(512);和BYTE *V1_Tempudp= new BYTE[512]; 
    的区别是什么?
      

  11.   

    1.如上所说,把你要发的10进制化成16进制 
    memcpy(V1_Tempudp, V1_Normaludp,sizeof(V1_Tempudp))
    2.[],()是一样的.
      

  12.   

    char szX[]="0x17";
    int i =0;char szBin[13]="";        //存放二进制字符串
    CString aaa,b;
    sscanf(szX, "%x", &i); //将十六进制字符串转换成整型。
    aaa.Format("%d",i);
    MessageBox(aaa);
    itoa(i, szBin, 2);           //将整型转换成二进制字符串。
    MessageBox(szBin);
    itoa(i, szBin, 8);           //将整型转换成8进制字符串。
    MessageBox(szBin);
    其他类似方法就可以转换