|
楼主 |
发表于 2023-11-18 13:07:56
|
显示全部楼层
#define NUMBER_DATA 100
typedef struct{
uint8_t *SendDataPrintfer;
uint8_t *SendDataPrintferHeader;
uint32_t num;
uint8_t SendDataPrintfer_Char[2000];
}Data_Test;
Data_Test SendData;
//测试蓝牙发送数据是否为1601 ff 数据
void decimal_to_hex(uint8_t decimal_num, uint8_t *hex_num) {
char hex_string[5]; // 足够存储 "0x" + 2 个十六进制字符 + 结束符
sprintf(hex_string, "0x%02X", decimal_num); // 将十进制数转换为十六进制格式的字符串
sscanf(hex_string, "%hhX", hex_num); // 将十六进制格式的字符串转换为十六进制数
}
void converToPrintInstruction(uint16_t decimalData[],uint8_t size)
{
static uint16_t Remember_Data = 0;
//static uint8_t flag = 0;
static uint8_t a = 0x16, b = 0x30;
uint16_t i = 0, j = 0, decimalValue = 0, m_g = 0;
uint16_t buwei = 0;
static uint8_t Data_Temp = 0;
static uint16_t binaryData[358] = {0};
uint16_t position[NUMBER_DATA] = {0};
if(size >= NUMBER_DATA)
{
printf("Error:Input data Number error.\n");
return;
}
//if(flag != 0)return;
for(m_g = 0; m_g < size; m_g++)
{
if(decimalData[m_g] < 0 || decimalData[m_g] > 4096)
{
printf("Error:Input data out of range.\n");
return;
}
for(i = 0; i < 384; i++)
{
binaryData[i] = 0;
}
position[m_g] = decimalData[m_g] * 384 / 4096;
binaryData[position[m_g]] = 1;
if(m_g >= 1)
{
if(position[m_g] != position[m_g-1])
{
if(position[m_g] > position[m_g-1])
{
buwei = position[m_g] - position[m_g-1];
for(i = 1; i <= buwei; i++)
{
binaryData[position[m_g]-i] = 1;
}
}
else
{
buwei = position[m_g-1] - position[m_g];
for(i = 1; i <= buwei; i++)
{
binaryData[position[m_g]+i] = 1;
}
}
}
else
{
if(decimalData[m_g] != decimalData[m_g-1])
{
if(decimalData[m_g] > decimalData[m_g-1])
{
binaryData[position[m_g]+1] = 1;
}
else
{
binaryData[position[m_g]-1] = 1;
}
}
}
}
//printf("1630 ");
*SendData.SendDataPrintfer = a;
SendData.SendDataPrintfer++;
//SendData.SendDataPrintfer_Char[Remember_Data++] = a;
SendData.num++;
*SendData.SendDataPrintfer = b;
//SendData.SendDataPrintfer_Char[Remember_Data++] = b;
SendData.SendDataPrintfer++;
SendData.num++;
for(i = 0; i < 48; i++)
{
decimalValue = 0;
for(j = 0; j < 8; j++)
{
decimalValue += binaryData[(i * 8) + j] << (7 - j);
}
//printf("%02X ",decimalValue);
decimal_to_hex(decimalValue,&Data_Temp);
*SendData.SendDataPrintfer = Data_Temp;
//SendData.SendDataPrintfer_Char[Remember_Data++] = Data_Temp;
SendData.SendDataPrintfer++;
SendData.num++;
}
}
//flag = 1;
}
int main() {
uint32_t i = 0;
memset(&SendData,0,sizeof(SendData));
SendData.SendDataPrintfer = (uint8_t *)malloc((sizeof(uint8_t))*1000);
SendData.SendDataPrintferHeader = SendData.SendDataPrintfer;
uint16_t decimal_num[4] = {2048};
converToPrintInstruction(decimal_num,1);
for(i = 0; i < SendData.num; i++)
{
printf("%x ",*SendData.SendDataPrintferHeader);
//printf("%x\n",SendData.SendDataPrintfer_Char[i]);
SendData.SendDataPrintferHeader++;
}
return 0;
}
这是改进之后的 |
|