mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
improve endian
This commit is contained in:
parent
d5eda23643
commit
1a8bd594bc
@ -1,5 +1,8 @@
|
||||
# 最新动态
|
||||
|
||||
2025/02/14
|
||||
* endian类增加了小端的支持和修改了注释(增加测试用例)(感谢智明提供补丁)
|
||||
|
||||
2025/02/13
|
||||
* 更新1m资源(感谢泽武提供补丁)
|
||||
* 增加 edit_ex (感谢兆坤提供补丁)
|
||||
|
252
src/tkc/endian.h
252
src/tkc/endian.h
@ -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*/
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user