300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言uint64_t转String C语言编程 8字节的数据转换为uint64_t类型数据

c语言uint64_t转String C语言编程 8字节的数据转换为uint64_t类型数据

时间:2022-08-30 03:23:57

相关推荐

c语言uint64_t转String C语言编程 8字节的数据转换为uint64_t类型数据

有2种方式可以实现:

第一种方式:

数据类型强制转换,需要注意平台是大端还是小端,如果平台是大端,那么字节数组存放的字节顺序是高字节在前;如果平台是小端,那么字节数组存放的字节顺序是低字节在前。

此例程需要在小端模式的平台上运行

/**

* @brief None

* @param None

* @retval None

*/

int main( void )

{

uint8_t ByteDatasLittleEnd[8] = {0x06, 0x4E, 0xE7, 0xDF, 0x72, 0x01, 0x00, 0x00 };

uint64_t u64Value;

u64Value = *(uint64_t *)ByteDatasLittleEnd;

printf("u64Value:%lld\r\n", u64Value );

}

运行结果:

u64Value:1592894377478

第二种方式:

通过移位实现,和平台的大小端无关,如果字节数组里存放的字节顺序是高字节在前,则使用ByteToU64BigEnd()函数;如果字节数组里存放的字节顺序是低字节在前,则使用ByteToU64LittleEnd()函数。

#include "stdint.h"

/**

* @brief Little end format.

* @param None

* @retval None

*/

uint64_t ByteToU64LittleEnd( uint8_t *ByteBuf )

{

uint64_t u64Value = 0;

for(int8_t i = 7; i >= 0; i--)

{

u64Value <<= 8;

u64Value |= ByteBuf[i];

}

return u64Value;

}

/**

* @brief Big end format.

* @param None

* @retval None

*/

uint64_t ByteToU64BigEnd( uint8_t *ByteBuf )

{

uint64_t u64Value = 0;

for(uint8_t i = 0; i < 8; i++)

{

u64Value <<= 8;

u64Value |= ByteBuf[i];

}

return u64Value;

}

/**

* @brief None

* @param None

* @retval None

*/

int main( void )

{

uint8_t ByteDatasBigEnd[8] = {0x00, 0x00, 0x01, 0x72, 0xDF, 0xE7, 0x4E, 0x06 };

uint8_t ByteDatasLittleEnd[8] = {0x06, 0x4E, 0xE7, 0xDF, 0x72, 0x01, 0x00, 0x00 };

uint64_t u64Value;

u64Value = ByteToU64BigEnd( ByteDatas );

printf("u64Value:%lld\r\n", u64Value );

u64Value = ByteToU64LittleEnd( ByteDatasLittleEnd );

printf("u64Value:%lld\r\n", u64Value );

}

运行结果:

u64Value:1592894377478

u64Value:1592894377478

火柴棍科技工作室:www.huochaigun.top

技术交流群

STM32MP1:861926625

ESP8266:476685983

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。