
資料1為:
-0.104897
490.156342
152.283615
990.748352
20.016148
50.002605
2629.717773
1B 41 46 32 32 32 34 00 2C 01 07 02 00 BD D6 D4 57 02 00 43 F5 14 03 02 00 43 18 48 9B 02 00 44 77 AF E5 02 00 41 A0 21 12 02 00 42 48 02 AB 02 00 45 24 5B 7C 41 36 03
資料2 一個值為 14.33
1B 4F 33 34 32 32 34 00 08 01 01 02 00 41 65 5A B9 42 31 03
資料3
值為 這個是三個 0
1B 41 43 33 32 32 34 00 14 01 03 00 80 00 00 00 00 00 80 00 00 00 00 00 80 00 00 00 00 39 33 03
早在上個帖子 趙四老師的 第一個值是對的,放 這些都不正確了, 沒看明白怎么更改。
uj5u.com熱心網友回復:
#pragma warning(disable:4996 4838) //開頭加這句或專案、屬性、配置屬性、C/C++、前處理器、前處理器定義中添加“_CRT_SECURE_NO_WARNINGS”
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#pragma pack(push)
#pragma pack(1)
struct CHANNEL {
short int Stat;
float Data;
};
struct DATA {
char Start;
char Address[4];
char Command[2];
char BinaryBlocSize[2];
char StartChannel;
unsigned char NumberOfChannel;
struct CHANNEL *Channel;
} data;
#pragma pack(pop)
void swapbyte(char *a,char *b) {
char t;
t=*a;*a=*b;*b=t;
}
int main() {
int NBC;
char b0[]={
0x1B,
0x41,0x46,0x32,0x32,
0x32,0x34,
0x00,0x2C,
0x01,
0x07,
0x02,0x00,
0xBD,0xD6,0xD4,0x57,
0x02,0x00,
0x43,0xF5,0x14,0x03,
0x02,0x00,
0x43,0x18,0x48,0x9B,
0x02,0x00,
0x44,0x77,0xAF,0xE5,
0x02,0x00,
0x41,0xA0,0x21,0x12,
0x02,0x00,
0x42,0x48,0x02,0xAB,
0x02,0x00,
0x45,0x24,0x5B,0x7C,
0x41,0x36,
0x03};
memcpy((void *)&data,(const void *)&b0[0],1+4+2+2+1+1);
NBC=(int)(data.NumberOfChannel);
printf("NBC:%d\n",NBC);
printf("sizeof(struct CHANNEL):%d\n",sizeof(struct CHANNEL));
data.Channel=(struct CHANNEL *)malloc(NBC*sizeof(struct CHANNEL));
memcpy((void *)(data.Channel),(const void *)&b0[1+4+2+2+1+1],NBC*sizeof(struct CHANNEL));
for (int i=0;i<NBC;i++) {
swapbyte(0+(char *)&(data.Channel[i].Data),3+(char *)&(data.Channel[i].Data));
swapbyte(1+(char *)&(data.Channel[i].Data),2+(char *)&(data.Channel[i].Data));
}
for (int i=0;i<NBC;i++) {
printf("%d 0x%04hX %f\n",i,data.Channel[i].Stat,data.Channel[i].Data);
}
free(data.Channel);
char b1[]={0x1B,0x4F,0x33,0x34,0x32,0x32,0x34,0x00,0x08,0x01,0x01,0x02,0x00,0x41,0x65,0x5A,0xB9,0x42,0x31,0x03};
memcpy((void *)&data,(const void *)&b1[0],1+4+2+2+1+1);
NBC=(int)(data.NumberOfChannel);
printf("NBC:%d\n",NBC);
printf("sizeof(struct CHANNEL):%d\n",sizeof(struct CHANNEL));
data.Channel=(struct CHANNEL *)malloc(NBC*sizeof(struct CHANNEL));
memcpy((void *)(data.Channel),(const void *)&b1[1+4+2+2+1+1],NBC*sizeof(struct CHANNEL));
for (int i=0;i<NBC;i++) {
swapbyte(0+(char *)&(data.Channel[i].Data),3+(char *)&(data.Channel[i].Data));
swapbyte(1+(char *)&(data.Channel[i].Data),2+(char *)&(data.Channel[i].Data));
}
for (int i=0;i<NBC;i++) {
printf("%d 0x%04hX %f\n",i,data.Channel[i].Stat,data.Channel[i].Data);
}
free(data.Channel);
char b2[]={0x1B,0x41,0x43,0x33,0x32,0x32,0x34,0x00,0x14,0x01,0x03,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x39,0x33,0x03};
memcpy((void *)&data,(const void *)&b2[0],1+4+2+2+1+1);
NBC=(int)(data.NumberOfChannel);
printf("NBC:%d\n",NBC);
printf("sizeof(struct CHANNEL):%d\n",sizeof(struct CHANNEL));
data.Channel=(struct CHANNEL *)malloc(NBC*sizeof(struct CHANNEL));
memcpy((void *)(data.Channel),(const void *)&b2[1+4+2+2+1+1],NBC*sizeof(struct CHANNEL));
for (int i=0;i<NBC;i++) {
swapbyte(0+(char *)&(data.Channel[i].Data),3+(char *)&(data.Channel[i].Data));
swapbyte(1+(char *)&(data.Channel[i].Data),2+(char *)&(data.Channel[i].Data));
}
for (int i=0;i<NBC;i++) {
printf("%d 0x%04hX %f\n",i,data.Channel[i].Stat,data.Channel[i].Data);
}
free(data.Channel);
return 0;
}
//NBC:7
//sizeof(struct CHANNEL):6
//0 0x0002 -0.104897
//1 0x0002 490.156342
//2 0x0002 152.283615
//3 0x0002 990.748352
//4 0x0002 20.016148
//5 0x0002 50.002605
//6 0x0002 2629.717773
//NBC:1
//sizeof(struct CHANNEL):6
//0 0x0002 14.334649
//NBC:3
//sizeof(struct CHANNEL):6
//0 0x8000 0.000000
//1 0x8000 0.000000
//2 0x8000 0.000000
//
uj5u.com熱心網友回復:
謝謝 趙四老師 能解釋下for (int i=0;i<NBC;i++) {
swapbyte(0+(char *)&(data.Channel[i].Data),3+(char *)&(data.Channel[i].Data));
swapbyte(1+(char *)&(data.Channel[i].Data),2+(char *)&(data.Channel[i].Data));
}
這段代碼嗎 沒看懂
uj5u.com熱心網友回復:
將0123四個位元組03交換,12交換,達到大端位元組順序轉換為小端位元組順序的目的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280764.html
標籤:C語言
上一篇:關于結構體指標定義指標變數
下一篇:為啥沒有輸出哇?好奇怪
