连接5个或更多字节并转换为十进制,然后转换为ASCII

时间:2018-01-28 18:10:52

标签: c microcontroller microchip c18

我在下面有这个数组:

dataIn[5] = 0x88;
dataIn[6] = 0x2A;
dataIn[7] = 0xC7;
dataIn[8] = 0x2B;
dataIn[9] = 0x00;
dataIn[10] = 0x28;

我需要将这些值转换为十进制,因为之后我需要将十进制值转换为ASCII并发送到UART。

例如:

|    Hexa      |      Decimal      | ASCII (I need to send this data to UART)
| 0x882AC72B00  | 584 833 248 000  | 35 38 34 38 33 33 32 34 38 30 30 30
| 0x5769345612  | 375 427 192 338  | 33 37 35 34 32 37 31 39 32 33 33 38

我的问题:这些数据应该放在一起并转换为十进制,但我的编译器仅用于4个字节,我不知道如何执行此操作,因为我有5个或更多字节。

Ps。:我正在使用PIC18F46K80和C18编译器

[编辑]

Click here to see what happen when I try to use more than 4 bytes. This is my problem

有人可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果我理解得很好,首先你要定义一个这样的联盟:

typedef union _DATA64
{
    uint64_t dataIn64;
    uint8_t dataIn8[8];
}tu_DATA64;

然后复制先前定义的union中的十六进制值:

uint8_t i;
tu_DATA64 data;

...

data.dataIn64=0;
for(i=0; i<5; i++)
    data.dataIn8[4-i]=dataIn[i];

现在你必须使用lltoa函数转换字符串中的64位变量,如post中所述:

char *str;

...

str=lltoa(data.dataIn64,10);

str是要发送的缓冲区字符串。

答案 1 :(得分:0)

您是否考虑过编写自己的转换功能?这是一个可以调整到任何长度的工作示例。

警告:我的C技能不是最好的!

{{1}}