improve endian

This commit is contained in:
lixianjing 2025-02-14 11:35:20 +08:00
parent d5eda23643
commit 1a8bd594bc
3 changed files with 246 additions and 22 deletions

View File

@ -1,5 +1,8 @@
# 最新动态
2025/02/14
* endian类增加了小端的支持和修改了注释增加测试用例(感谢智明提供补丁)
2025/02/13
* 更新1m资源感谢泽武提供补丁
* 增加 edit_ex (感谢兆坤提供补丁)

View File

@ -99,7 +99,7 @@ static inline bool_t is_little_endian(void) {
* @method int16_endian_invert
* @annotation ["static"]
* @export none
* 16
* 16
* @param {int16_t} value
*
* @return {int16_t}
@ -117,7 +117,7 @@ static inline int16_t int16_endian_invert(int16_t value) {
* @method int16_to_big_endian
* @annotation ["static"]
* @export none
* 16
* 16
* @param {int16_t} value
*
* @return {int16_t}
@ -130,7 +130,7 @@ static inline int16_t int16_to_big_endian(int16_t value) {
* @method int16_from_big_endian
* @annotation ["static"]
* @export none
* 16
* 16
* @param {int16_t} value
*
* @return {int16_t}
@ -139,11 +139,37 @@ static inline int16_t int16_from_big_endian(int16_t value) {
return is_little_endian() ? int16_endian_invert(value) : value;
}
/**
* @method int16_to_little_endian
* @annotation ["static"]
* @export none
* 16
* @param {int16_t} value
*
* @return {int16_t}
*/
static inline int16_t int16_to_little_endian(int16_t value) {
return is_little_endian() ? value : int16_endian_invert(value);
}
/**
* @method int16_from_little_endian
* @annotation ["static"]
* @export none
* 16
* @param {int16_t} value
*
* @return {int16_t}
*/
static inline int16_t int16_from_little_endian(int16_t value) {
return is_little_endian() ? value : int16_endian_invert(value);
}
/**
* @method uint16_endian_invert
* @annotation ["static"]
* @export none
* 16
* 16
* @param {uint16_t} value
*
* @return {uint16_t}
@ -161,7 +187,7 @@ static inline uint16_t uint16_endian_invert(uint16_t value) {
* @method uint16_to_big_endian
* @annotation ["static"]
* @export none
* 16
* 16
* @param {uint16_t} value
*
* @return {uint16_t}
@ -174,7 +200,7 @@ static inline uint16_t uint16_to_big_endian(uint16_t value) {
* @method uint16_from_big_endian
* @annotation ["static"]
* @export none
* 16
* 16
* @param {uint16_t} value
*
* @return {uint16_t}
@ -183,11 +209,37 @@ static inline uint16_t uint16_from_big_endian(uint16_t value) {
return is_little_endian() ? uint16_endian_invert(value) : value;
}
/**
* @method uint16_to_little_endian
* @annotation ["static"]
* @export none
* 16
* @param {uint16_t} value
*
* @return {uint16_t}
*/
static inline uint16_t uint16_to_little_endian(uint16_t value) {
return is_little_endian() ? value : uint16_endian_invert(value);
}
/**
* @method uint16_from_little_endian
* @annotation ["static"]
* @export none
* 16
* @param {uint16_t} value
*
* @return {uint16_t}
*/
static inline uint16_t uint16_from_little_endian(uint16_t value) {
return is_little_endian() ? value : uint16_endian_invert(value);
}
/**
* @method int32_endian_invert
* @annotation ["static"]
* @export none
* 32
* 32
* @param {int32_t} value
*
* @return {int32_t}
@ -206,7 +258,7 @@ static inline int32_t int32_endian_invert(int32_t value) {
* @method int32_to_big_endian
* @annotation ["static"]
* @export none
* 32
* 32
* @param {int32_t} value
*
* @return {int32_t}
@ -219,7 +271,7 @@ static inline int32_t int32_to_big_endian(int32_t value) {
* @method int32_from_big_endian
* @annotation ["static"]
* @export none
* 32
* 32
* @param {int32_t} value
*
* @return {int32_t}
@ -228,11 +280,37 @@ static inline int32_t int32_from_big_endian(int32_t value) {
return is_little_endian() ? int32_endian_invert(value) : value;
}
/**
* @method int32_to_little_endian
* @annotation ["static"]
* @export none
* 32
* @param {int32_t} value
*
* @return {int32_t}
*/
static inline int32_t int32_to_little_endian(int32_t value) {
return is_little_endian() ? value : int32_endian_invert(value);
}
/**
* @method int32_from_little_endian
* @annotation ["static"]
* @export none
* 32
* @param {int32_t} value
*
* @return {int32_t}
*/
static inline int32_t int32_from_little_endian(int32_t value) {
return is_little_endian() ? value : int32_endian_invert(value);
}
/**
* @method uint32_endian_invert
* @annotation ["static"]
* @export none
* 32
* 32
* @param {uint32_t} value
*
* @return {uint32_t}
@ -251,7 +329,7 @@ static inline uint32_t uint32_endian_invert(uint32_t value) {
* @method uint32_to_big_endian
* @annotation ["static"]
* @export none
* 32
* 32
* @param {uint32_t} value
*
* @return {uint32_t}
@ -264,7 +342,7 @@ static inline uint32_t uint32_to_big_endian(uint32_t value) {
* @method uint32_from_big_endian
* @annotation ["static"]
* @export none
* 32
* 32
* @param {uint32_t} value
*
* @return {uint32_t}
@ -273,11 +351,37 @@ static inline uint32_t uint32_from_big_endian(uint32_t value) {
return is_little_endian() ? uint32_endian_invert(value) : value;
}
/**
* @method uint32_to_little_endian
* @annotation ["static"]
* @export none
* 32
* @param {uint32_t} value
*
* @return {uint32_t}
*/
static inline uint32_t uint32_to_little_endian(uint32_t value) {
return is_little_endian() ? value : uint32_endian_invert(value);
}
/**
* @method uint32_from_little_endian
* @annotation ["static"]
* @export none
* 32
* @param {uint32_t} value
*
* @return {uint32_t}
*/
static inline uint32_t uint32_from_little_endian(uint32_t value) {
return is_little_endian() ? value : uint32_endian_invert(value);
}
/**
* @method int64_endian_invert
* @annotation ["static"]
* @export none
* 64
* 64
* @param {int64_t} value
*
* @return {int64_t}
@ -298,7 +402,7 @@ static inline int64_t int64_endian_invert(int64_t value) {
* @method int64_to_big_endian
* @annotation ["static"]
* @export none
* 64
* 64
* @param {int64_t} value
*
* @return {int64_t}
@ -311,7 +415,7 @@ static inline int64_t int64_to_big_endian(int64_t value) {
* @method int64_from_big_endian
* @annotation ["static"]
* @export none
* 64
* 64
* @param {int64_t} value
*
* @return {int64_t}
@ -320,11 +424,37 @@ static inline int64_t int64_from_big_endian(int64_t value) {
return is_little_endian() ? int64_endian_invert(value) : value;
}
/**
* @method int64_to_little_endian
* @annotation ["static"]
* @export none
* 64
* @param {int64_t} value
*
* @return {int64_t}
*/
static inline int64_t int64_to_little_endian(int64_t value) {
return is_little_endian() ? value : int64_endian_invert(value);
}
/**
* @method int64_from_little_endian
* @annotation ["static"]
* @export none
* 64
* @param {int64_t} value
*
* @return {int64_t}
*/
static inline int64_t int64_from_little_endian(int64_t value) {
return is_little_endian() ? value : int64_endian_invert(value);
}
/**
* @method uint64_endian_invert
* @annotation ["static"]
* @export none
* 64
* 64
* @param {uint64_t} value
*
* @return {uint64_t}
@ -345,7 +475,7 @@ static inline uint64_t uint64_endian_invert(uint64_t value) {
* @method uint64_to_big_endian
* @annotation ["static"]
* @export none
* 64
* 64
* @param {uint64_t} value
*
* @return {uint64_t}
@ -358,7 +488,7 @@ static inline uint64_t uint64_to_big_endian(uint64_t value) {
* @method uint64_from_big_endian
* @annotation ["static"]
* @export none
* 64
* 64
* @param {uint64_t} value
*
* @return {uint64_t}
@ -367,6 +497,32 @@ static inline uint64_t uint64_from_big_endian(uint64_t value) {
return is_little_endian() ? uint64_endian_invert(value) : value;
}
/**
* @method uint64_to_little_endian
* @annotation ["static"]
* @export none
* 64
* @param {uint64_t} value
*
* @return {uint64_t}
*/
static inline uint64_t uint64_to_little_endian(uint64_t value) {
return is_little_endian() ? value : uint64_endian_invert(value);
}
/**
* @method uint64_from_little_endian
* @annotation ["static"]
* @export none
* 64
* @param {uint64_t} value
*
* @return {uint64_t}
*/
static inline uint64_t uint64_from_little_endian(uint64_t value) {
return is_little_endian() ? value : uint64_endian_invert(value);
}
/**
* @method float_endian_invert
* @annotation ["static"]
@ -390,7 +546,7 @@ static inline float float_endian_invert(float value) {
* @method float_to_big_endian
* @annotation ["static"]
* @export none
* float浮点数转换为大端模式
* float
* @param {float} value
*
* @return {float}
@ -403,7 +559,7 @@ static inline float float_to_big_endian(float value) {
* @method float_from_big_endian
* @annotation ["static"]
* @export none
* float浮点数转换为小端模式
* float
* @param {float} value
*
* @return {float}
@ -412,6 +568,32 @@ static inline float float_from_big_endian(float value) {
return is_little_endian() ? float_endian_invert(value) : value;
}
/**
* @method float_to_little_endian
* @annotation ["static"]
* @export none
* float
* @param {float} value
*
* @return {float}
*/
static inline float float_to_little_endian(float value) {
return is_little_endian() ? value : float_endian_invert(value);
}
/**
* @method float_from_little_endian
* @annotation ["static"]
* @export none
* float
* @param {float} value
*
* @return {float}
*/
static inline float float_from_little_endian(float value) {
return is_little_endian() ? value : float_endian_invert(value);
}
/**
* @method double_endian_invert
* @annotation ["static"]
@ -438,7 +620,7 @@ static inline double double_endian_invert(double value) {
* @method double_to_big_endian
* @annotation ["static"]
* @export none
* double浮点数转换为大端模式
* double
* @param {double} value
*
* @return {double}
@ -451,7 +633,7 @@ static inline double double_to_big_endian(double value) {
* @method double_from_big_endian
* @annotation ["static"]
* @export none
* double浮点数转换为小端模式
* double
* @param {double} value
*
* @return {double}
@ -460,6 +642,32 @@ static inline double double_from_big_endian(double value) {
return is_little_endian() ? double_endian_invert(value) : value;
}
/**
* @method double_to_little_endian
* @annotation ["static"]
* @export none
* double
* @param {double} value
*
* @return {double}
*/
static inline double double_to_little_endian(double value) {
return is_little_endian() ? value : double_endian_invert(value);
}
/**
* @method double_from_little_endian
* @annotation ["static"]
* @export none
* double
* @param {double} value
*
* @return {double}
*/
static inline double double_from_little_endian(double value) {
return is_little_endian() ? value : double_endian_invert(value);
}
END_C_DECLS
#endif /*TK_ENDIAN_H*/

View File

@ -7,12 +7,16 @@ TEST(Endian, int16) {
ASSERT_EQ(int16_endian_invert(a), 0x2211);
ASSERT_EQ(int16_to_big_endian(a), 0x2211);
ASSERT_EQ(int16_from_big_endian(int16_to_big_endian(a)), a);
ASSERT_EQ(int16_to_little_endian(a), 0x1122);
ASSERT_EQ(int16_from_little_endian(int16_to_little_endian(a)), a);
}
TEST(Endian, int16_10) {
int16_t a = 1000;
ASSERT_EQ(is_little_endian(), TRUE);
ASSERT_EQ(int16_from_big_endian(int16_to_big_endian(a)), a);
ASSERT_EQ(int16_from_little_endian(int16_to_little_endian(a)), a);
}
TEST(Endian, int32) {
@ -21,6 +25,9 @@ TEST(Endian, int32) {
ASSERT_EQ(int32_endian_invert(a), 0x44332211);
ASSERT_EQ(int32_to_big_endian(a), 0x44332211);
ASSERT_EQ(int32_from_big_endian(int32_to_big_endian(a)), a);
ASSERT_EQ(int32_to_little_endian(a), 0x11223344);
ASSERT_EQ(int32_from_little_endian(int32_to_little_endian(a)), a);
}
TEST(Endian, int64) {
@ -29,17 +36,23 @@ TEST(Endian, int64) {
ASSERT_EQ(int64_endian_invert(a), (int64_t)0x8877665544332211);
ASSERT_EQ(int64_to_big_endian(a), (int64_t)0x8877665544332211);
ASSERT_EQ(int64_from_big_endian(int64_to_big_endian(a)), a);
ASSERT_EQ(int64_to_little_endian(a), (int64_t)0x1122334455667788);
ASSERT_EQ(int64_from_little_endian(int64_to_little_endian(a)), a);
}
TEST(Endian, float) {
float_t a = 1122.3344;
ASSERT_EQ(float_from_big_endian(float_to_big_endian(a)), a);
ASSERT_EQ(float_from_little_endian(float_to_little_endian(a)), a);
}
TEST(Endian, double) {
double_t a = 1122.3344;
ASSERT_EQ(double_from_big_endian(double_to_big_endian(a)), a);
ASSERT_EQ(double_from_little_endian(double_to_little_endian(a)), a);
a = 12;
ASSERT_EQ(double_from_big_endian(double_to_big_endian(a)), a);
ASSERT_EQ(double_from_little_endian(double_to_little_endian(a)), a);
}