dxbsw/version_checker

1.0.0

Latest
uploaded 4 days ago
version comparison component

readme

# Version Checker

这是一个用于 ESP-IDF 工程的版本号比较组件。

## 功能说明

* 支持纯数字方式比较 3 位或 4 位版本号大小。
* 支持纯数字方式判断 3 位或 4 位版本号是否完全相同。
* 支持字符串方式比较 `"1.5.23"`、`"2.0.32.105"` 这类版本号大小。
* 支持字符串方式判断版本号是否完全相同。

## 目录结构

```text
version_checker/
├── include/
│   └── version_checker.h
├── src/
│   └── version_checker.c
├── CMakeLists.txt
├── idf_component.yml
└── README.md
```

## 对外接口

头文件:

```c
#include "version_checker.h"
```

接口分类:

```c
bool version_is_greater_parts(...);
bool version_is_equal_parts(...);
bool version_is_greater_string(const char *current_version, const char *compare_version);
bool version_is_equal_string(const char *current_version, const char *compare_version);
```

说明:

* `version_is_greater_parts(...)` 支持 6 个参数和 8 个参数两种形式,分别对应 3 位版本号和 4 位版本号。
* `version_is_equal_parts(...)` 支持 6 个参数和 8 个参数两种形式,分别对应 3 位版本号和 4 位版本号。
* `version_is_greater_string(...)` 和 `version_is_equal_string(...)` 要求两边的版本号位数一致。

## 使用示例

### 数字方式

```c
bool result1 = version_is_greater_parts(1, 5, 26, 1, 5, 25);
bool result2 = version_is_greater_parts(2, 0, 32, 105, 2, 0, 32, 104);
bool result3 = version_is_equal_parts(1, 5, 23, 1, 5, 23);
bool result4 = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 105);
```

### 字符串方式

```c
bool result1 = version_is_greater_string("1.5.26", "1.5.25");
bool result2 = version_is_greater_string("2.0.32.105", "2.0.32.104");
bool result3 = version_is_equal_string("1.5.23", "1.5.23");
bool result4 = version_is_equal_string("2.0.32.105", "2.0.32.105");
```

## main.c 测试示例

下面示例整理自 `main/main.c` 中的测试代码,可直接用于串口日志验证:

```c
bool parts_greater_3_true = version_is_greater_parts(1, 5, 26, 1, 5, 25);
ESP_LOGI(TAG, "比较 1.5.26 是否大于 1.5.25: %s", parts_greater_3_true ? "true" : "false");
bool parts_greater_3_false = version_is_greater_parts(1, 5, 25, 1, 5, 26);
ESP_LOGI(TAG, "比较 1.5.25 是否大于 1.5.26: %s", parts_greater_3_false ? "true" : "false");

bool parts_greater_4_true = version_is_greater_parts(2, 0, 32, 105, 2, 0, 32, 104);
ESP_LOGI(TAG, "比较 2.0.32.105 是否大于 2.0.32.104: %s", parts_greater_4_true ? "true" : "false");
bool parts_greater_4_false = version_is_greater_parts(2, 0, 32, 104, 2, 0, 32, 105);
ESP_LOGI(TAG, "比较 2.0.32.104 是否大于 2.0.32.105: %s", parts_greater_4_false ? "true" : "false");

bool parts_equal_3_true = version_is_equal_parts(1, 5, 23, 1, 5, 23);
ESP_LOGI(TAG, "比较 1.5.23 是否等于 1.5.23: %s", parts_equal_3_true ? "true" : "false");
bool parts_equal_3_false = version_is_equal_parts(1, 5, 23, 1, 5, 24);
ESP_LOGI(TAG, "比较 1.5.23 是否等于 1.5.24: %s", parts_equal_3_false ? "true" : "false");

bool parts_equal_4_true = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 105);
ESP_LOGI(TAG, "比较 2.0.32.105 是否等于 2.0.32.105: %s", parts_equal_4_true ? "true" : "false");
bool parts_equal_4_false = version_is_equal_parts(2, 0, 32, 105, 2, 0, 32, 106);
ESP_LOGI(TAG, "比较 2.0.32.105 是否等于 2.0.32.106: %s", parts_equal_4_false ? "true" : "false");

bool string_greater_3_true = version_is_greater_string("1.5.26", "1.5.25");
ESP_LOGI(TAG, "比较 \"1.5.26\" 是否大于 \"1.5.25\": %s", string_greater_3_true ? "true" : "false");
bool string_greater_3_false = version_is_greater_string("1.5.25", "1.5.26");
ESP_LOGI(TAG, "比较 \"1.5.25\" 是否大于 \"1.5.26\": %s", string_greater_3_false ? "true" : "false");

bool string_greater_4_true = version_is_greater_string("2.0.32.105", "2.0.32.104");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否大于 \"2.0.32.104\": %s", string_greater_4_true ? "true" : "false");
bool string_greater_4_false = version_is_greater_string("2.0.32.104", "2.0.32.105");
ESP_LOGI(TAG, "比较 \"2.0.32.104\" 是否大于 \"2.0.32.105\": %s", string_greater_4_false ? "true" : "false");

bool string_equal_3_true = version_is_equal_string("1.5.23", "1.5.23");
ESP_LOGI(TAG, "比较 \"1.5.23\" 是否等于 \"1.5.23\": %s", string_equal_3_true ? "true" : "false");
bool string_equal_3_false = version_is_equal_string("1.5.23", "1.5.24");
ESP_LOGI(TAG, "比较 \"1.5.23\" 是否等于 \"1.5.24\": %s", string_equal_3_false ? "true" : "false");

bool string_equal_4_true = version_is_equal_string("2.0.32.105", "2.0.32.105");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否等于 \"2.0.32.105\": %s", string_equal_4_true ? "true" : "false");
bool string_equal_4_false = version_is_equal_string("2.0.32.105", "2.0.32.106");
ESP_LOGI(TAG, "比较 \"2.0.32.105\" 是否等于 \"2.0.32.106\": %s", string_equal_4_false ? "true" : "false");

```

Links

Supports all targets

License: MIT

To add this component to your project, run:

idf.py add-dependency "dxbsw/version_checker^1.0.0"

download archive

Stats

  • Archive size
    Archive size ~ 4.12 KB
  • Downloaded in total
    Downloaded in total 0 times
  • Downloaded this version
    This version: 0 times

Badge

dxbsw/version_checker version: 1.0.0
|