awtk/docs/manual/rbuffer_t.md

544 lines
14 KiB
Markdown
Raw Normal View History

2018-12-20 17:33:31 +08:00
## rbuffer\_t
### 概述
2019-12-14 13:25:56 +08:00
Read Buffer。用于数据解包。
示例:
```c
uint8_t buff[128];
wbuffer_t wbuffer;
rbuffer_t rbuffer;
const char* str = NULL;
wbuffer_init(&wbuffer, buff, sizeof(buff));
wbuffer_write_string(&wbuffer, "hello awtk");
rbuffer_init(&rbuffer, wbuffer.data, wbuffer.cursor);
rbuffer_read_string(&rbuffer, &str);
```
2019-01-15 14:34:05 +08:00
----------------------------------
2018-12-20 17:33:31 +08:00
### 函数
<p id="rbuffer_t_methods">
| 函数名称 | 说明 |
| -------- | ------------ |
2023-12-26 19:09:36 +08:00
| <a href="#rbuffer_t_rbuffer_create">rbuffer\_create</a> | 创建rbuffer对象。 |
| <a href="#rbuffer_t_rbuffer_deinit">rbuffer\_deinit</a> | 释放rbuffer资源。 |
| <a href="#rbuffer_t_rbuffer_destroy">rbuffer\_destroy</a> | 销毁rbuffer对象。 |
2018-12-21 12:11:40 +08:00
| <a href="#rbuffer_t_rbuffer_has_more">rbuffer\_has\_more</a> | 判断是否还有数据可读。 |
| <a href="#rbuffer_t_rbuffer_init">rbuffer\_init</a> | 初始rbuffer对象。 |
| <a href="#rbuffer_t_rbuffer_peek_uint16">rbuffer\_peek\_uint16</a> | 读取uint16数据但不改变cursor的位置。 |
| <a href="#rbuffer_t_rbuffer_peek_uint32">rbuffer\_peek\_uint32</a> | 读取uint32数据但不改变cursor的位置。 |
| <a href="#rbuffer_t_rbuffer_peek_uint8">rbuffer\_peek\_uint8</a> | 读取uint8数据但不改变cursor的位置。 |
| <a href="#rbuffer_t_rbuffer_read_binary">rbuffer\_read\_binary</a> | 读取指定长度的二进制数据。 |
2021-01-11 08:23:05 +08:00
| <a href="#rbuffer_t_rbuffer_read_double">rbuffer\_read\_double</a> | 读取double数据。 |
2018-12-21 12:11:40 +08:00
| <a href="#rbuffer_t_rbuffer_read_float">rbuffer\_read\_float</a> | 读取float数据。 |
2023-12-26 19:09:36 +08:00
| <a href="#rbuffer_t_rbuffer_read_int16">rbuffer\_read\_int16</a> | 读取int16数据。 |
2021-02-23 11:17:36 +08:00
| <a href="#rbuffer_t_rbuffer_read_int32">rbuffer\_read\_int32</a> | 读取int32数据。 |
2023-12-26 19:09:36 +08:00
| <a href="#rbuffer_t_rbuffer_read_int64">rbuffer\_read\_int64</a> | 读取int64数据。 |
| <a href="#rbuffer_t_rbuffer_read_int8">rbuffer\_read\_int8</a> | 读取int8数据。 |
2018-12-21 12:11:40 +08:00
| <a href="#rbuffer_t_rbuffer_read_string">rbuffer\_read\_string</a> | 读取字符串。 |
| <a href="#rbuffer_t_rbuffer_read_uint16">rbuffer\_read\_uint16</a> | 读取uint16数据。 |
| <a href="#rbuffer_t_rbuffer_read_uint32">rbuffer\_read\_uint32</a> | 读取uint32数据。 |
2021-01-11 08:23:05 +08:00
| <a href="#rbuffer_t_rbuffer_read_uint64">rbuffer\_read\_uint64</a> | 读取uint64数据。 |
2018-12-21 12:11:40 +08:00
| <a href="#rbuffer_t_rbuffer_read_uint8">rbuffer\_read\_uint8</a> | 读取uint8数据。 |
2023-12-26 19:09:36 +08:00
| <a href="#rbuffer_t_rbuffer_read_value">rbuffer\_read\_value</a> | 读取value数据。 |
2021-01-11 08:23:05 +08:00
| <a href="#rbuffer_t_rbuffer_rewind">rbuffer\_rewind</a> | 重置当前读取位置。 |
2018-12-21 12:11:40 +08:00
| <a href="#rbuffer_t_rbuffer_skip">rbuffer\_skip</a> | 跳过指定的长度。 |
2018-12-20 17:33:31 +08:00
### 属性
<p id="rbuffer_t_properties">
2019-01-17 15:56:15 +08:00
| 属性名称 | 类型 | 说明 |
2018-12-20 17:33:31 +08:00
| -------- | ----- | ------------ |
2019-12-30 12:44:15 +08:00
| <a href="#rbuffer_t_capacity">capacity</a> | uint32\_t | 缓存区的容量。 |
2018-12-21 18:29:29 +08:00
| <a href="#rbuffer_t_cursor">cursor</a> | uint32\_t | 当前读取位置。 |
2023-06-29 10:44:29 +08:00
| <a href="#rbuffer_t_data">data</a> | const uint8\_t* | 数据缓冲区。 |
2023-12-26 19:09:36 +08:00
#### rbuffer\_create 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_create">创建rbuffer对象。
* 函数原型:
```
rbuffer_t* rbuffer_create (const void* data, uint32_t capacity);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | rbuffer\_t* | rbuffer对象本身。 |
| data | const void* | 缓冲区。 |
| capacity | uint32\_t | 缓冲区的容量。 |
#### rbuffer\_deinit 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_deinit">释放rbuffer资源。
* 函数原型:
```
ret_t rbuffer_deinit (rbuffer_t* rbuffer);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
#### rbuffer\_destroy 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_destroy">销毁rbuffer对象。
* 函数原型:
```
ret_t rbuffer_destroy (rbuffer_t* rbuffer);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2018-12-20 17:33:31 +08:00
#### rbuffer\_has\_more 函数
2018-12-21 18:29:29 +08:00
-----------------------
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_has_more">判断是否还有数据可读。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
bool_t rbuffer_has_more (rbuffer_t* rbuffer);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | bool\_t | 返回TRUE表示还有数据可读否则表示无数据可读。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_init 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_init">初始rbuffer对象。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
2023-12-26 19:09:36 +08:00
rbuffer_t* rbuffer_init (rbuffer_t* rbuffer, const void* data, uint32_t capacity);
2018-12-21 11:39:05 +08:00
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | rbuffer\_t* | rbuffer对象本身。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2023-12-26 19:09:36 +08:00
| data | const void* | 缓冲区。 |
2023-06-29 10:44:29 +08:00
| capacity | uint32\_t | 缓冲区的容量。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_peek\_uint16 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_peek_uint16">读取uint16数据但不改变cursor的位置。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_peek_uint16 (rbuffer_t* rbuffer, uint16_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2019-12-30 12:44:15 +08:00
| value | uint16\_t* | 返回读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_peek\_uint32 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_peek_uint32">读取uint32数据但不改变cursor的位置。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_peek_uint32 (rbuffer_t* rbuffer, uint32_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | uint32\_t* | 读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_peek\_uint8 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_peek_uint8">读取uint8数据但不改变cursor的位置。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_peek_uint8 (rbuffer_t* rbuffer, uint8_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2019-12-30 12:44:15 +08:00
| value | uint8\_t* | 返回读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_binary 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_binary">读取指定长度的二进制数据。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_read_binary (rbuffer_t* rbuffer, void* data, uint32_t size);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2019-12-30 12:44:15 +08:00
| data | void* | 返回读取的数据。 |
2018-12-20 17:33:31 +08:00
| size | uint32\_t | 读取的数据长度。 |
2021-01-11 08:23:05 +08:00
#### rbuffer\_read\_double 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_double">读取double数据。
* 函数原型:
```
ret_t rbuffer_read_double (rbuffer_t* rbuffer, double* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | double* | 返回读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_float 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_float">读取float数据。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
2021-01-11 08:23:05 +08:00
ret_t rbuffer_read_float (rbuffer_t* rbuffer, float* value);
2018-12-21 11:39:05 +08:00
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2021-01-11 08:23:05 +08:00
| value | float* | 返回读取的数据。 |
2023-12-26 19:09:36 +08:00
#### rbuffer\_read\_int16 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_int16">读取int16数据。
* 函数原型:
```
ret_t rbuffer_read_int16 (rbuffer_t* rbuffer, int16_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | int16\_t* | 读取的数据。 |
2021-02-23 11:17:36 +08:00
#### rbuffer\_read\_int32 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_int32">读取int32数据。
* 函数原型:
```
ret_t rbuffer_read_int32 (rbuffer_t* rbuffer, int32_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | int32\_t* | 返回读取的数据。 |
2023-12-26 19:09:36 +08:00
#### rbuffer\_read\_int64 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_int64">读取int64数据。
* 函数原型:
```
ret_t rbuffer_read_int64 (rbuffer_t* rbuffer, int64_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | int64\_t* | 返回读取的数据。 |
#### rbuffer\_read\_int8 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_int8">读取int8数据。
* 函数原型:
```
ret_t rbuffer_read_int8 (rbuffer_t* rbuffer, int8_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | int8\_t* | 返回读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_string 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_string">读取字符串。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
2023-06-29 10:44:29 +08:00
ret_t rbuffer_read_string (rbuffer_t* rbuffer, const char** str);
2018-12-21 11:39:05 +08:00
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2023-06-29 10:44:29 +08:00
| str | const char** | 返回字符串。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_uint16 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_uint16">读取uint16数据。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_read_uint16 (rbuffer_t* rbuffer, uint16_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | uint16\_t* | 读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_uint32 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_uint32">读取uint32数据。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_read_uint32 (rbuffer_t* rbuffer, uint32_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2019-12-30 12:44:15 +08:00
| value | uint32\_t* | 返回读取的数据。 |
2021-01-11 08:23:05 +08:00
#### rbuffer\_read\_uint64 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_uint64">读取uint64数据。
* 函数原型:
```
ret_t rbuffer_read_uint64 (rbuffer_t* rbuffer, uint64_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| value | uint64\_t* | 返回读取的数据。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_read\_uint8 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_read_uint8">读取uint8数据。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_read_uint8 (rbuffer_t* rbuffer, uint8_t* value);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2019-12-30 12:44:15 +08:00
| value | uint8\_t* | 返回读取的数据。 |
2023-12-26 19:09:36 +08:00
#### rbuffer\_read\_value 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_read_value">读取value数据。
* 函数原型:
```
ret_t rbuffer_read_value (rbuffer_t* rbuffer, value_t* v);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| v | value\_t* | 返回读取的数据。 |
2021-01-11 08:23:05 +08:00
#### rbuffer\_rewind 函数
-----------------------
* 函数功能:
> <p id="rbuffer_t_rbuffer_rewind">重置当前读取位置。
* 函数原型:
```
2023-06-29 10:44:29 +08:00
ret_t rbuffer_rewind (rbuffer_t* rbuffer);
2021-01-11 08:23:05 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2023-06-29 10:44:29 +08:00
| rbuffer | rbuffer\_t* | rbuffer对象。 |
2018-12-21 18:29:29 +08:00
#### rbuffer\_skip 函数
-----------------------
2018-12-21 11:39:05 +08:00
* 函数功能:
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_rbuffer_skip">跳过指定的长度。
2019-10-16 09:02:32 +08:00
2018-12-21 11:39:05 +08:00
* 函数原型:
```
ret_t rbuffer_skip (rbuffer_t* rbuffer, int32_t offset);
```
* 参数说明:
2018-12-20 17:33:31 +08:00
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| rbuffer | rbuffer\_t* | rbuffer对象。 |
| offset | int32\_t | 跳过的偏移量,正数往前负数往回跳。 |
#### capacity 属性
-----------------------
2019-12-30 12:44:15 +08:00
> <p id="rbuffer_t_capacity">缓存区的容量。
2019-10-16 09:02:32 +08:00
2018-12-20 17:33:31 +08:00
* 类型uint32\_t
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### cursor 属性
-----------------------
2019-11-15 11:33:43 +08:00
> <p id="rbuffer_t_cursor">当前读取位置。
2019-10-16 09:02:32 +08:00
2018-12-20 17:33:31 +08:00
* 类型uint32\_t
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### data 属性
-----------------------
2019-12-30 12:44:15 +08:00
> <p id="rbuffer_t_data">数据缓冲区。
2019-10-16 09:02:32 +08:00
2023-06-29 10:44:29 +08:00
* 类型const uint8\_t*
2018-12-20 17:33:31 +08:00
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |