函数版本
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