- 问题背景
- 具体实现
- C代码
在项目中,许多时候需要将十进制(DEC
)的浮点、整型数据,批量转换为十六进制(HEX
)的数据。
这里,提供下C语言的实现版本,有兴趣者,用Python实现可能会更方便些。
-
功能需求
- 十进制浮点转十六进制整型
- 十进制整型转十六进制浮点
- 输入:拷贝待转换数据至代码区,赋值相应类型的数组
- 输出:打印转换后的数据至txt文件
- 要求:具备可扩展性,便于其他如八进制、二进制相互转换
-
实现思路
- 数据准备
- 打开待写入文件
- 从数组中读取对应数据
- 利用格式化字符串进行类型转换
- 按要求的个数k输出,即k个数据为一行
#include
#define LEN_MAX_NUM 12
#define LEN_MAX_NUM_INT 8
#define Q30 1073741824
const float fRawData[LEN_MAX_NUM] = {
1.2, 1.3, 1.5, 0.6, 1.0, 0.9, 0.4, 0.3, 0.7, 0.8, 0.1, 0.4,
};
const int iRawData[LEN_MAX_NUM_INT] = {
1, 2, 4, 8, 16, 32, 64, 128,
};
void FloatDec2Hex(float *nums, int rowLen, int len)
{
FILE *outStream = fopen("D:\workspace\outstream.txt", "w+"); // a+在文件末尾追加, w+每次从头开始写
fprintf(outStream, "HexRawData");
int k = rowLen; // 一行rowLen个元素
int i;
for (i = 0; i < LEN_MAX_NUM; i++) {
if (i % k == 0) {
fprintf(outStream, "\n"); // 满k个元素,追加换行符
}
fprintf(outStream, "0x%08x, ", (int32_t)(nums[i] * Q30));
}
fprintf(outStream, "\n\n");
fclose(outStream);
return;
}
void IntDec2Hex(int *nums, int rowLen, int len)
{
FILE *outStream = fopen("D:\workspace\outstream.txt", "w+"); // a+在文件末尾追加, w+每次从头开始写
fprintf(outStream, "HexRawData");
int k = rowLen; // 一行rowLen个元素
int i;
for (i = 0; i < LEN_MAX_NUM; i++) {
if (i % k == 0) {
fprintf(outStream, "\n"); // 满k个元素,追加换行符
}
fprintf(outStream, "0x%08x, ", nums[i]);
}
fprintf(outStream, "\n\n");
fclose(outStream);
return;
}
int main(void)
{
printf("Start processing...\n");
// FloatDec2Hex(fRawData, 4, LEN_MAX_NUM);
IntDec2Hex(iRawData, 2, LEN_MAX_NUM_INT);
printf("Done!\n");
return 0;
}
行文至此,聪明的读者可能会想,如何把十六进制的数据转成十进制的呢?
其实也很简单,只用改一两处代码即可,留给读者思考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)