高低位转换之法二---4字节篇

对4字节变量转换例子

 

// ConvertData.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
//#define cdr_int32_to(from) \
// ( (((from) & (0xfful << 24)) >> 24) \
// | (((from) & (0xfful << 16)) >> 8) \
// | (((from) & (0xfful << 8)) << 8) \
// | (((from) & 0xfful) << 24) )

#define cdr_int32_to(from) \
( (((from) & (0xff << 24)) >> 24) \
| (((from) & (0xff << 16)) >> 8) \
| (((from) & (0xff << 8)) << 8) \
| (((from) & 0xff) << 24) )
struct MysDI{
unsigned int mydi1 :1;
unsigned int mydi2 :1;
};
struct struct_data{
int a;
int b;
MysDI myDI;
};

int _tmain(int argc, _TCHAR* argv[])
{
//system("color 2");
int data = 0x12345678;
//dataConvert(data);
//data = ( (((data) & (0xfful << 24)) >> 24) | (((data) & (0xfful << 16)) >> 8) | (((data) & (0xfful << 8)) << 8) | (((data) & 0xfful) << 24) );
data = ( (((data) & (0xff << 24)) >> 24) | (((data) & (0xff << 16)) >> 8) | (((data) & (0xff << 8)) << 8) | (((data) & 0xff) << 24) );

cdr_int32_to(data);
char buffer[20];
char buffer1[20];
//char *pBuff = (char*)&data;
memset(buffer,0,sizeof(buffer));
memset(buffer1,0,sizeof(buffer1));
buffer[3] = *(char*)&data;
buffer[2] = *((char*)&data+1);
buffer[1] = *((char*)&data+2);
buffer[0] = *((char*)&data+3);

buffer1[0] = *(char*)&data;
buffer1[1] = *((char*)&data+1);
buffer1[2] = *((char*)&data+2);
buffer1[3] = *((char*)&data+3);

//printf("data source ----> %f \n", data);
//printf("dataConvert ----> %f \n", /*data*/*(float*)buffer);
//printf("dataConvert1 ----> %f \n", /*data*/*(float*)buffer1);

//================test struct======================
struct_data Mystruct,fromPLC;
Mystruct.a = Mystruct.b = 0x12345678;
Mystruct.myDI.mydi1 = 1;
Mystruct.myDI.mydi2 = 0;

char *p = (char*)&fromPLC;
printf("data source ----> %x, %x \n", Mystruct.a,Mystruct.b,
Mystruct.myDI.mydi1,Mystruct.myDI.mydi2);

char struct_buffer[20],convert_buff[20];
memset(struct_buffer,0,sizeof(struct_buffer));
memset(convert_buff,0,sizeof(convert_buff));

memcpy(struct_buffer,&Mystruct,sizeof(struct_data));
memcpy(convert_buff,&Mystruct,sizeof(struct_data));
//for (int i = 0; i < 2; i ++)
//{
// convert_buff[i*4 + 0] = struct_buffer[i*4 + 3];
// convert_buff[i*4 + 1] = struct_buffer[i*4 + 2];
// convert_buff[i*4 + 2] = struct_buffer[i*4 + 1];
// convert_buff[i*4 + 3] = struct_buffer[i*4 + 0];
//}

//memcpy(&fromPLC,convert_buff,sizeof(struct_data));

for (int i = 0; i < 2; i ++)
{
p[i*4 + 0] = struct_buffer[i*4 + 3];
p[i*4 + 1] = struct_buffer[i*4 + 2];
p[i*4 + 2] = struct_buffer[i*4 + 1];
p[i*4 + 3] = struct_buffer[i*4 + 0];
}

printf("data convert ----> %x, %x \n", fromPLC.a,fromPLC.b);

printf("data convert ----> %d, %d \n", fromPLC.myDI.mydi1,fromPLC.myDI.mydi2);

return 0;
}

 

posted on 2011-11-21 14:18  媳妇是阿东  阅读(968)  评论(0)    收藏  举报

导航