C語言字節數組轉換為基本數據類型


首先,必須明確基本類型在不同環境下字節的大小

這里用到了unsigned char:1  int:4  double:8

自己主要想用的是將字節數組轉換為int型,double型

具體來說,將接收到的4字節數組數據轉換為int型

             將接收到的8字節數組數據轉換為double型

java中有大量的函數可直接利用,C語言只能自己寫了,主要用到了<string.h>中的memcpy函數

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{   
    
    int i;
    int result_src=1246;
    unsigned char message[4];
    int result_dst;
    double money_src=200.00;
    unsigned char s[8];
    double money_dst;
    //={0XDe,0X04,0,0};
       printf("unsigned char:%d  int:%d  double:%d\n",sizeof(unsigned char),sizeof(int),sizeof(double));
       printf("\n正變換---將int型數據轉換為4字節數組:\n");
    memcpy(message,&result_src,sizeof(int));
        for(i=0;i<4;i++)
        {
         printf("%x ",message[i]);
        } 
         printf("\n逆變換---將4字節數組轉換為int型數據:\n");  
        result_dst=message[0]+(message[1]<<8)+(message[2]<<16)+(message[3]<<24);
       // memcpy(&result_dst,message,sizeof(int)); 
        printf("%d ",result_dst);
  
    printf("\n------------------------");
      
      printf("\n正變換---將double型數據轉換為8字節數組:\n");
      memcpy(s,&money_src,sizeof(double));
      //顯示 
       for(i=0;i<8;i++)
        {
         printf("%x ",s[i]);
        } 
     printf("\n逆變換---將8字節數組轉換為double型數據:\n");  
     memcpy(&money_dst,s,sizeof(double)); 
     //顯示 
     printf("%f \n",money_dst);
    system("pause");
    return 0;
}

將接收到的4字節數組數據轉換為int型:

兩種方法:1,移位   2.利用memcpy

result_dst=message[0]+(message[1]<<8)+(message[2]<<16)+(message[3]<<24);

將接收到的8字節數組數據轉換為double型

 利用memcpy

我們可以看到通過使用mempy既可以將基本數據轉換為字節數組,亦可以將字節數組轉換為基本數據類型,唯一需要注意的是位數問題

附注:(當出現大小端問題,解決思路)

C/C++中,直接進行內存拷貝就可以了:

1
2
3
4
BYTE  s[8];
memcpy (s,money, sizeof ( double ));
int  intMoney = ( int )(money*10);
memmove (s,intMoney, sizeof ( int ));

需要注意的是根據使用邏輯,如果需要字節逆序(這個很奇怪,因為通常是int類型需要)還是要做之后那個循環。另外就是數據類型了,double是8字節的格式存儲,int是4字節逆序存儲。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM