32位无符号整数:
- 十进制:258
- 二进制:0000 0000 0000 0001 0000 0010
被拆分为三个8位无符号整数:
- 第一个8位无符号整数:
- 二进制:0000 0000
- 十进制:0
- 第二个8位无符号整数:
- 二进制:0000 0001
- 十进制:1
- 第三个8位无符号整数:
- 二进制:0000 0010
- 十进制:2
8位无符号整数数组打印样式:
000,001,002
实现以下两个函数:
* @brief : 将 value 拆分为 3 段,写入 disk 中
* @param value: 待写入值
* @param disk : 被写入的位置
void serialization(uint32_t value, uint8_t *disk);
* @brief : 将 data[0] ~ data[2] 组合为一个int变量
* @param data: 数据保存位置
* @return : 组合得到的值
uint32_t deserialize(const uint8_t *data);
程序运行时,通过scanf
获取一个不大于0xffffffff
的正整数。
被转存的数组,以及由数组转换回的正整数。
Input value number:257
Got `257` divided to 000,001,001.
Combine: 257.
Input value number:7
Got `7` divided to 000,000,007.
Combine: 7.
位移的应用,指针传入函数
#include <stdio.h>
#include <stdint.h>
void serialization(uint32_t value, uint8_t *disk);
uint32_t deserialize(const uint8_t *data);
int main() {
uint32_t value;
uint8_t data[3];
printf("Input value number: ");
scanf("%u", &value);
serialization(value, data);
printf("Got `%u` divided to %03hu,%03hu,%03hu.\n", value, data[0], data[1], data[2]);
printf("Combine: %u.\n", deserialize(data));
return 0;
* @brief : 将 value 拆分为 3 段,写入 disk 中
* @param value: 待写入值
* @param disk : 被写入的位置
void serialization(uint32_t value, uint8_t *disk) {
for (int i = 2; i >= 0; i--) {
disk[i] = value;
value >>= 8;
* @brief : 将 data[0] ~ data[2] 组合为一个int变量
* @param data: 数据保存位置
* @return : 组合得到的值
uint32_t deserialize(const uint8_t *data) {
uint32_t ret = 0;
for (int i = 0; i < 2; i++) {
ret += data[i];
ret <<= 8;
ret += data[2];
return ret;