函数版本
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/build/
|
||||||
17
.vscode/c_cpp_properties.json
vendored
Normal file
17
.vscode/c_cpp_properties.json
vendored
Normal file
@@ -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
|
||||||
|
}
|
||||||
7
.vscode/settings.json
vendored
Normal file
7
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"C_Cpp.default.compilerPath": "/usr/bin/g++-14",
|
||||||
|
"files.associations": {
|
||||||
|
"stdio.h": "c"
|
||||||
|
},
|
||||||
|
"commentTranslate.targetLanguage": "en"
|
||||||
|
}
|
||||||
36
CMakeLists.txt
Executable file
36
CMakeLists.txt
Executable file
@@ -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}
|
||||||
|
)
|
||||||
208
src/lib/data/data.c
Executable file
208
src/lib/data/data.c
Executable file
@@ -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 <stdlib.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
46
src/lib/data/data.h
Executable file
46
src/lib/data/data.h
Executable file
@@ -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 <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#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
|
||||||
18
src/main.c
Executable file
18
src/main.c
Executable file
@@ -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 <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user