commit 23f05f47eaecca69a0ff4c4cd0b5fdb1a0ec019b Author: guishenking Date: Wed Nov 26 21:03:28 2025 +0800 函数版本 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3d6549 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build/ \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..65d4986 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", // 工作区所有子目录 + "/usr/include/**", // 系统头文件路径 + "/usr/local/include/**" + ], + "defines": [], + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3a22d1e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "C_Cpp.default.compilerPath": "/usr/bin/g++-14", + "files.associations": { + "stdio.h": "c" + }, + "commentTranslate.targetLanguage": "en" +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..429c6a0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.20) + +project(My_ptotocol VERSION 0.1 LANGUAGES CXX C) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_COMPILER gcc) +set(CMAKE_C_STANDARD_REQUIRED ON) +# set(CMAKE_CXX_STANDARD 23) +# set(CMAKE_CXX_COMPILER g++) +# set(CMAKE_CXX_STANDARD_REQUIRED ON) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0") + +include_directories( + . + src/lib +) +set(PROJECT_SOURCES + src/main.c + src/lib/data/data.c +) +add_executable(${PROJECT_NAME} + ${PROJECT_SOURCES} +) +target_link_libraries(${PROJECT_NAME} +) + +include(GNUInstallDirs) +install(TARGETS ${PROJECT_NAME} + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) \ No newline at end of file diff --git a/src/lib/data/data.c b/src/lib/data/data.c new file mode 100755 index 0000000..d4b4ac3 --- /dev/null +++ b/src/lib/data/data.c @@ -0,0 +1,208 @@ +/******************************************************************************************** + * @file data.c + * @author jinguishen (jinguishen@crte.com.cn) + * Description : + * @version 0.1 + * @date 2025-11-26 + * + * @copyright Copyright (c) 2025 + * +*********************************************************************************************/ +#include "data.h" +#include + +uint16_t convertU8ArrayToU16_BigEndian(const uint8_t *paucBuffer) +{ + return ((uint16_t)paucBuffer[0] << 8) | + ((uint16_t)paucBuffer[1]); +} + +uint16_t convertU8ArrayToU16_LittleEndian(const uint8_t *paucBuffer) +{ + return ((uint16_t)paucBuffer[1] << 8) | + ((uint16_t)paucBuffer[0]); +} + +uint32_t convertU8ArrayToU32_BigEndian(const uint8_t *paucBuffer) +{ + return ((uint32_t)paucBuffer[0] << 24) | + ((uint32_t)paucBuffer[1] << 16) | + ((uint32_t)paucBuffer[2] << 8) | + ((uint32_t)paucBuffer[3]); +} + +uint32_t convertU8ArrayToU32_LittleEndian(const uint8_t *paucBuffer) +{ + return ((uint32_t)paucBuffer[3] << 24) | + ((uint32_t)paucBuffer[2] << 16) | + ((uint32_t)paucBuffer[1] << 8) | + ((uint32_t)paucBuffer[0]); +} + +uint64_t convertU8ArrayToU64_BigEndian(const uint8_t *paucBuffer) +{ + return ((uint64_t)paucBuffer[0] << 56) | + ((uint64_t)paucBuffer[1] << 48) | + ((uint64_t)paucBuffer[2] << 40) | + ((uint64_t)paucBuffer[3] << 32) | + ((uint64_t)paucBuffer[4] << 24) | + ((uint64_t)paucBuffer[5] << 16) | + ((uint64_t)paucBuffer[6] << 8) | + ((uint64_t)paucBuffer[7]); +} + +uint64_t convertU8ArrayToU64_LittleEndian(const uint8_t *paucBuffer) +{ + return ((uint64_t)paucBuffer[7] << 56) | + ((uint64_t)paucBuffer[6] << 48) | + ((uint64_t)paucBuffer[5] << 40) | + ((uint64_t)paucBuffer[4] << 32) | + ((uint64_t)paucBuffer[3] << 24) | + ((uint64_t)paucBuffer[2] << 16) | + ((uint64_t)paucBuffer[1] << 8) | + ((uint64_t)paucBuffer[0]); +} + +uint32_t convertU16ArrayToU32_BigEndian(const uint16_t *pauBuffer) +{ + return ((uint32_t)pauBuffer[0] << 16) | + ((uint32_t)pauBuffer[1]); +} + +uint32_t convertU16ArrayToU32_LittleEndian(const uint16_t *pauBuffer) +{ + return ((uint32_t)pauBuffer[1] << 16) | + ((uint32_t)pauBuffer[0]); +} + +uint64_t convertU16ArrayToU64_BigEndian(const uint16_t *pauBuffer) +{ + return ((uint64_t)pauBuffer[0] << 48) | + ((uint64_t)pauBuffer[1] << 32) | + ((uint64_t)pauBuffer[2] << 16) | + ((uint64_t)pauBuffer[3]); +} + +uint64_t convertU16ArrayToU64_LittleEndian(const uint16_t *pauBuffer) +{ + return ((uint64_t)pauBuffer[3] << 48) | + ((uint64_t)pauBuffer[2] << 32) | + ((uint64_t)pauBuffer[1] << 16) | + ((uint64_t)pauBuffer[0]); +} + +uint64_t convertU32ArrayToU64_BigEndian(const uint32_t *pausBuffer) +{ + return ((uint64_t)pausBuffer[0] << 32) | + ((uint64_t)pausBuffer[1]); +} + +uint64_t convertU32ArrayToU64_LittleEndian(const uint32_t *pausBuffer) +{ + return ((uint64_t)pausBuffer[1] << 32) | + ((uint64_t)pausBuffer[0]); +} + +uint8_t* convertU16ToU8Array_BigEndian(uint16_t value, uint8_t *paucBuffer) +{ + paucBuffer[0] = (uint8_t)(value >> 8); + paucBuffer[1] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint8_t* convertU16ToU8Array_LittleEndian(uint16_t value, uint8_t *paucBuffer) +{ + paucBuffer[1] = (uint8_t)(value >> 8); + paucBuffer[0] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint8_t* convertU32ToU8Array_BigEndian(uint32_t value, uint8_t *paucBuffer) +{ + paucBuffer[0] = (uint8_t)(value >> 24); + paucBuffer[1] = (uint8_t)((value >> 16) & 0xFF); + paucBuffer[2] = (uint8_t)((value >> 8) & 0xFF); + paucBuffer[3] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint8_t* convertU32ToU8Array_LittleEndian(uint32_t value, uint8_t *paucBuffer) +{ + paucBuffer[3] = (uint8_t)(value >> 24); + paucBuffer[2] = (uint8_t)((value >> 16) & 0xFF); + paucBuffer[1] = (uint8_t)((value >> 8) & 0xFF); + paucBuffer[0] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint8_t* convertU64ToU8Array_BigEndian(uint64_t value, uint8_t *paucBuffer) +{ + paucBuffer[0] = (uint8_t)(value >> 56); + paucBuffer[1] = (uint8_t)((value >> 48) & 0xFF); + paucBuffer[2] = (uint8_t)((value >> 40) & 0xFF); + paucBuffer[3] = (uint8_t)((value >> 32) & 0xFF); + paucBuffer[4] = (uint8_t)((value >> 24) & 0xFF); + paucBuffer[5] = (uint8_t)((value >> 16) & 0xFF); + paucBuffer[6] = (uint8_t)((value >> 8) & 0xFF); + paucBuffer[7] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint8_t* convertU64ToU8Array_LittleEndian(uint64_t value, uint8_t* paucBuffer) +{ + paucBuffer[7] = (uint8_t)(value >> 56); + paucBuffer[6] = (uint8_t)((value >> 48) & 0xFF); + paucBuffer[5] = (uint8_t)((value >> 40) & 0xFF); + paucBuffer[4] = (uint8_t)((value >> 32) & 0xFF); + paucBuffer[3] = (uint8_t)((value >> 24) & 0xFF); + paucBuffer[2] = (uint8_t)((value >> 16) & 0xFF); + paucBuffer[1] = (uint8_t)((value >> 8) & 0xFF); + paucBuffer[0] = (uint8_t)(value & 0xFF); + return paucBuffer; +} + +uint16_t* convertU32ToU16Array_BigEndian(uint32_t value, uint16_t* pauBuffer) +{ + pauBuffer[0] = (uint16_t)((value >> 16) & 0xFFFF); + pauBuffer[1] = (uint16_t)(value & 0xFFFF); + return pauBuffer; +} + +uint16_t* convertU32ToU16Array_LittleEndian(uint32_t value, uint16_t* pauBuffer) +{ + pauBuffer[1] = (uint16_t)((value >> 16) & 0xFFFF); + pauBuffer[0] = (uint16_t)(value & 0xFFFF); + return pauBuffer; +} + +uint16_t* convertU64ToU16Array_BigEndian(uint64_t value, uint16_t* pauBuffer) +{ + pauBuffer[0] = (uint16_t)(value >> 48); + pauBuffer[1] = (uint16_t)((value >> 32) & 0xFFFF); + pauBuffer[2] = (uint16_t)((value >> 16) & 0xFFFF); + pauBuffer[3] = (uint16_t)(value & 0xFFFF); + return pauBuffer; +} + +uint16_t* convertU64ToU16Array_LittleEndian(uint64_t value, uint16_t* pauBuffer) +{ + pauBuffer[3] = (uint16_t)(value >> 48); + pauBuffer[2] = (uint16_t)((value >> 32) & 0xFFFF); + pauBuffer[1] = (uint16_t)((value >> 16) & 0xFFFF); + pauBuffer[0] = (uint16_t)(value & 0xFFFF); + return pauBuffer; +} + +uint32_t* convertU64ToU32Array_BigEndian(uint64_t value, uint32_t* pausBuffer) +{ + pausBuffer[0] = (uint32_t)((value >> 32) & 0xFFFFFFFF); + pausBuffer[1] = (uint32_t)(value & 0xFFFFFFFF); + return pausBuffer; +} + +uint32_t* convertU64ToU32Array_LittleEndian(uint64_t value, uint32_t* pausBuffer) +{ + pausBuffer[1] = (uint32_t)((value >> 32) & 0xFFFFFFFF); + pausBuffer[0] = (uint32_t)(value & 0xFFFFFFFF); + return pausBuffer; +} \ No newline at end of file diff --git a/src/lib/data/data.h b/src/lib/data/data.h new file mode 100755 index 0000000..7b8994d --- /dev/null +++ b/src/lib/data/data.h @@ -0,0 +1,46 @@ +/******************************************************************************************** + * @file data.h + * @author jinguishen (jinguishen@crte.com.cn) + * Description : + * @version 0.1 + * @date 2025-11-26 + * + * @copyright Copyright (c) 2025 + * +*********************************************************************************************/ +#ifndef DATA_PROCESS_H +#define DATA_PROCESS_H +#include +#include +#include + +#define U8TOU32(value) ((uint32_t)(value)) +#define U8TOU64(value) ((uint64_t)(value)) +#define U16TOU32(value) ((uint32_t)(value)) +#define U16TOU64(value) ((uint64_t)(value)) +#define U32TOU64(value) ((uint64_t)(value)) + + +#pragma pack(1) +typedef struct vector{ + void *data; // 数据指针 + size_t size; // 当前元素数量 + size_t capacity; // 总容量 + size_t elem_size;// 单个元素大小 +} vector_t; +#pragma pack() + +#pragma pack(1) +enum vector_error { + VECTOR_OK = 0, // 成功 + VECTOR_ERR_NULL, // 空指针错误 + VECTOR_ERR_OUT_OF_BOUNDS, // 索引越界错误 + VECTOR_ERR_MEMORY, // 内存分配错误 + VECTOR_ERR_INVALID_SIZE, // 无效大小错误 + VECTOR_ERR_MULTIPLE, // 多重定义错误 + VECTOR_ERR_NOT_MATCH // 未找到错误 +}; +#pragma pack() + + +#endif // DATA_PROCESS_H \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100755 index 0000000..8da402a --- /dev/null +++ b/src/main.c @@ -0,0 +1,18 @@ +/** + * @file main.c + * @author guishenking (guishenking@outlook.com) + * @brief + * @version 0.1 + * @date 2025-08-15 + * + * @copyright Copyright (c) 2025 + * + */ +#include "lib/data/data.h" +#include +#include + +int main(void) +{ + return 0; +} \ No newline at end of file