Motorola编码格式:
Demo程序:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int id = 0, dlc = 0, s_bit = 0, len = 0;
int row, col;
unsigned char tmp=0U;
unsigned char can_pkg[8];
unsigned char tmp_pkg[8][8]={0U};
unsigned long long sig_val=0;
unsigned long long sig_tmp = 0;
printf("please input id,dlc,start_bit,len,sign_val:\n");
scanf("%d %d %d %d %d", &id, &dlc, &s_bit, &len, &sig_val);
// Test
// id=320;
// dlc=10;
// s_bit=50;
// len=40;
// sig_val=0xEEEEE;
sig_tmp = sig_val;
// get start location
row = s_bit / 8;
col = 7 - (s_bit % 8);
// split bit to array
for (int i = 0; i < len; i++)
{
if(row<0){
printf("error args\n");
exit(-1);
}
tmp_pkg[row][col] = sig_tmp & 0x01;
sig_tmp = sig_tmp >> 1;
col--;
if(col<0){
col=7;
row--;
}
}
// display array
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
printf("%d ", tmp_pkg[i][j]);
}
printf("\n");
}
// package the data
for(int i=0;i<8;i++)
{
tmp=0U;
for(int j=0;j<8;j++)
{
tmp=tmp|tmp_pkg[i][j];
if(7!=j)
{
tmp=tmp<<1;
}
}
can_pkg[i]=tmp;
}
// display
printf("$%d $%d ",id,dlc);
for(int i=0;i<8;i++)
{
printf("$%02X ",can_pkg[i]);
}
return 0;
}