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
總結
以上是生活随笔為你收集整理的c语言uint64_t转String,C语言编程 8字节的数据转换为uint64_t类型数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可视化编程,公网访问——全网首个基于No
- 下一篇: 个性化用户配置