函数版本

This commit is contained in:
2025-11-26 21:03:28 +08:00
commit 23f05f47ea
7 changed files with 333 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build/

17
.vscode/c_cpp_properties.json vendored Normal file
View 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
View 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
View 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
View 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
View 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
View 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;
}