您的位置:首页 > 其它

[置顶] 有四个线程1、2、3、4,线程1的功能就是输出1,线程2的功能就是输出2,以此类推......... 现在有四个文件A B C D,初始都为空。现要让四个文件呈如下格式:A:1 2 3 4 1 2..

2018-02-26 14:54 459 查看

模拟串口数据传递

(参考了一些网上的思路,在此表示感谢~)需要注意的是:   
    对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0;
    对于有符号数来说,用的是算术移位,左移多出的会移进符号位,右移在gcc编译器下是算术右移,即空出的高位补符号位。详细可参考此处:C语言 有符号数和无符号数的移位运算
#include < stdlib.h >
#include < stdio.h >
typedef unsigned char uint8;
typedef unsigned int uint32;
int main(void) {
uint32 num1 = 12345678,
num2;
int num3 = -12345678,
num4;
float num5 = -1234.567,
num6;
uint8 TxBuf1[4];
char TxBuf2[4];
int i;
//------------------------------------------------ 串口发送无符号整数TxBuf1[0] = num1;// printf("TxBuf[0] = 0x%x\n",TxBuf[0]);     TxBuf1[1] = num1 >> 8;    // printf("TxBuf[1] = 0x%x\n",TxBuf[1]); TxBuf1[2] = num1 >> 16;// printf("TxBuf[2] = 0x%x\n",TxBuf[2]); TxBuf1[3] = num1 >> 24;// printf("TxBuf[3] = 0x%x\n",TxBuf[3]); num2 = ((uint32)TxBuf1[0] | (uint32)TxBuf1[1]<<8 | (uint32)TxBuf1[2]<<16 | (uint32)TxBuf1[3]<<24); printf("num2 = %d\n",num2); //-------------------------------------------------- 串口发送有符号整数  TxBuf2[0] = *((int *)&num3); TxBuf2[1] = *((int *)&num3) >> 8; TxBuf2[2] = *((int *)&num3) >> 16; TxBuf2[3] = *((int *)&num3) >> 24;  num4 = *((int *)TxBuf2); printf("num4 = %d\n",num4); //------------------------------------------------ 串口发送浮点数  TxBuf2[0] = *((int *)&num5); TxBuf2[1] = *((int *)&num5) >> 8; TxBuf2[2] = *((int *)&num5) >> 16; TxBuf2[3] = *((int *)&num5) >> 24;  num6 = *((float *)TxBuf2); printf("num6 = %f\n",num6);
//------------------------------------------------ 串口发送浮点数  char *p = (char *)&num5; for(i = 0;i < sizeof(float);i++)  TxBuf2[i] = *p++;
num6 = *((float * ) TxBuf2);
printf("num6 = %f\n", num6);
return 0;
}
运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐