首先,必須明確基本類型在不同環境下字節的大小
這里用到了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字節逆序存儲。