String
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
#ifndef INCLUDED_C_HEX_H
|
||||
#define INCLUDED_C_HEX_H
|
||||
|
||||
#ifndef INCLUDED_C_TYPES_H
|
||||
#include <c_Types.h>
|
||||
#endif /*INCLUDED_C_TYPES_H*/
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------------------------------------------- */
|
||||
/* */
|
||||
|
||||
|
||||
void c_Hex_DumpBin(const void* data, c_size_t size, int line_size);
|
||||
|
||||
void c_Hex_Dump(const void *data, c_size_t size);
|
||||
|
||||
void c_Hex_DumpTo(const void *data, c_size_t size, void (*dump)(const char*, ...));
|
||||
|
||||
c_err_t c_Hex_HexToBin(const char* hex_str, void* out_bin, c_size_t bin_max_cap, c_size_t* out_size);
|
||||
|
||||
|
||||
/**
|
||||
* @brief 工业级二进制安全:二进制字节流正向解析还原为标准十六进制文本字符串
|
||||
*
|
||||
* @param in_bin 待转化的二进制字节流物理缓冲区首地址(二进制安全,支持 \0 内置流)
|
||||
* @param bin_size 二进制字节流的绝对有效物理字节总大小 (N)
|
||||
* @param uppercase 控制开关:true 导出为大写十六进制字符串(如 "4A00FE");false 导出为小写(如 "4a00fe")
|
||||
* @param out_hex_str 由外部声明传入、用于承接导出的十六进制可写文本缓冲区起始地址
|
||||
* @param hex_max_cap 外部文本缓冲区的最大物理插槽配额上限限制(防缓冲区溢出踩踏)
|
||||
*/
|
||||
c_err_t c_Hex_BinToHex(const void* in_bin, c_size_t bin_size, bool uppercase, char* out_hex_str, c_size_t hex_max_cap);
|
||||
|
||||
|
||||
/* ================================================================================ */
|
||||
#define C_HEX_SET_UINT8(array, idx, u8v) ((array)[(idx)]=(u8v)&0xFF)
|
||||
|
||||
#define C_HEX_SET_UINT16_BE(array, idx, u16v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u16v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u16v)) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT16_LE(array, idx, u16v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u16v)) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u16v) >> 8) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT24_BE(array, idx, u24v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u24v) >> 16) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u24v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u24v)) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT24_LE(array, idx, u24v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u24v)) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u24v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u24v) >> 16) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT32_BE(array, idx, u32v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u32v) >> 24) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u32v) >> 16) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u32v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+3] = ((u32v)) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT32_LE(array, idx, u32v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u32v)) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u32v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u32v) >> 16) & 0xFF; \
|
||||
(array)[(idx)+3] = ((u32v) >> 24) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT64_BE(array, idx, u64v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u64v) >> 56) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u64v) >> 48) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u64v) >> 40) & 0xFF; \
|
||||
(array)[(idx)+3] = ((u64v) >> 32) & 0xFF; \
|
||||
(array)[(idx)+4] = ((u64v) >> 24) & 0xFF; \
|
||||
(array)[(idx)+5] = ((u64v) >> 16) & 0xFF; \
|
||||
(array)[(idx)+6] = ((u64v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+7] = ((u64v)) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_SET_UINT64_LE(array, idx, u64v) \
|
||||
do{ \
|
||||
(array)[(idx)] = ((u64v)) & 0xFF; \
|
||||
(array)[(idx)+1] = ((u64v) >> 8) & 0xFF; \
|
||||
(array)[(idx)+2] = ((u64v) >> 16) & 0xFF; \
|
||||
(array)[(idx)+3] = ((u64v) >> 24) & 0xFF; \
|
||||
(array)[(idx)+4] = ((u64v) >> 32) & 0xFF; \
|
||||
(array)[(idx)+5] = ((u64v) >> 40) & 0xFF; \
|
||||
(array)[(idx)+6] = ((u64v) >> 48) & 0xFF; \
|
||||
(array)[(idx)+7] = ((u64v) >> 56) & 0xFF; \
|
||||
}while(0)
|
||||
|
||||
#define C_HEX_GET_UINT8(array, idx) (((array)[(idx)])&0xFF)
|
||||
|
||||
#define C_HEX_GET_UINT16_BE(array, idx) ((((array)[(idx)]&0xFF)<<8) | ((array)[(idx)+1] & 0xFF))
|
||||
#define C_HEX_GET_UINT16_LE(array, idx) (((array)[(idx)]&0xFF) | (((array)[(idx)+1] & 0xFF)<<8) )
|
||||
|
||||
#define C_HEX_GET_UINT24_BE(array, idx) ( (((array)[(idx)]&0xFF)<<16) | (((array)[(idx)+1]&0xFF)<<8) | ((array)[(idx)+2] & 0xFF) )
|
||||
#define C_HEX_GET_UINT24_LE(array, idx) ( ((array)[(idx)]&0xFF) | (((array)[(idx)+1]&0xFF)<<8) | (((array)[(idx)+2]&0xFF)<<16) )
|
||||
|
||||
#define C_HEX_GET_UINT32_BE(array, idx) ( \
|
||||
(((array)[(idx)]&0xFF)<<24) \
|
||||
| (((array)[(idx)+1]&0xFF)<<16) \
|
||||
| (((array)[(idx)+2]&0xFF)<<8) \
|
||||
| ((array)[(idx)+3] & 0xFF) )
|
||||
|
||||
#define C_HEX_GET_UINT32_LE(array, idx) ( \
|
||||
((array)[(idx)]&0xFF) \
|
||||
| (((array)[(idx)+1]&0xFF)<<8) \
|
||||
| (((array)[(idx)+2]&0xFF)<<16) \
|
||||
| (((array)[(idx)+3]&0xFF)<<24) )
|
||||
|
||||
|
||||
#define C_HEX_GET_UINT64_BE(array, idx) ( \
|
||||
((uint64_t)((array)[(idx)]&0xFF)<<56) \
|
||||
| ((uint64_t)((array)[(idx)+1]&0xFF)<<48) \
|
||||
| ((uint64_t)((array)[(idx)+2]&0xFF)<<40) \
|
||||
| ((uint64_t)((array)[(idx)+3]&0xFF)<<32) \
|
||||
| ((uint64_t)((array)[(idx)+4]&0xFF)<<24) \
|
||||
| ((uint64_t)((array)[(idx)+5]&0xFF)<<16) \
|
||||
| ((uint64_t)((array)[(idx)+6]&0xFF)<<8) \
|
||||
| ((uint64_t)(array)[(idx)+7] & 0xFF) )
|
||||
|
||||
#define C_HEX_GET_UINT64_LE(array, idx) ( \
|
||||
((uint64_t)(array)[(idx)]&0xFF) \
|
||||
| ((uint64_t)((array)[(idx)+1]&0xFF)<<8) \
|
||||
| ((uint64_t)((array)[(idx)+2]&0xFF)<<16) \
|
||||
| ((uint64_t)((array)[(idx)+3]&0xFF)<<24) ) \
|
||||
| ((uint64_t)((array)[(idx)+4]&0xFF)<<32) ) \
|
||||
| ((uint64_t)((array)[(idx)+5]&0xFF)<<40) ) \
|
||||
| ((uint64_t)((array)[(idx)+6]&0xFF)<<48) ) \
|
||||
| ((uint64_t)((array)[(idx)+7]&0xFF)<<56) )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*INCLUDED_C_HEX_H*/
|
||||
Reference in New Issue
Block a user