最近在看leveldb的源代码,其中32位固定编码实现如下以及验证程序如下:
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#define kLittleEndian false
void EncodeFixed32(char* buf, uint32_t value) {
if (kLittleEndian) {
memcpy(buf, &value, sizeof(value));
} else {
buf[0] = value & 0xff;
buf[1] = (value >> 8) & 0xff;
buf[2] = (value >> 16) & 0xff;
buf[3] = (value >> 24) & 0xff;
}
}
int main(int argc, char* argv[]) {
char buf[] = "1234";
printf("%s\n", buf);
uint32_t value = 0x31323334;
EncodeFixed32(buf, value);
printf("%s\n", buf);
return 0;
}
程序运行结果如下:
1234
4321
顺便说下0x31代表ascii码中的1, kLittleEndian代表机器是否采用小端存储。