[C/C++]_[十六进制字符串转换数值并写入文件]
2013-07-24 15:42
411 查看
场景:
1.有时候需要把十六进制的颜色值转换为整型值。
2.有时候需要生成二进制格式的特定文件。
生成的二进制文件:
1.有时候需要把十六进制的颜色值转换为整型值。
2.有时候需要生成二进制格式的特定文件。
#include <stdio.h> #include <stdint.h> #include <assert.h> #include <stdlib.h> #include <math.h> #include <string.h> size_t ConvertHexStrToInt(const char* hex_str,size_t length) { size_t sum = 0; for(size_t i = 0;i < length; ++i) { int asc = (int)hex_str[i]; size_t r1 =(asc & 0x40)?(asc&0x0F)+0x9:(asc & 0x0F); sum+=(r1*pow(16,length-i-1)); } return sum; } uint8_t * ConvertToBinBuf(const char* hex_str,size_t *buf_size) { if(!hex_str) { *buf_size = 0; return NULL; } //1.偶数个 size_t len = strlen(hex_str); assert(!(len%2)); *buf_size = len/2; uint8_t* buf = (uint8_t*)malloc(*buf_size); for(size_t i = 0,j = 0; i<len; i+=2,++j) { uint8_t value = (uint8_t)ConvertHexStrToInt(hex_str+i,2); buf[j] = value; } return buf; } int main(int argc, char *argv[]) { printf(".......................\n"); const char* str= "000000DD000000E00000015C000000E2"; // uint8_t buf[]= // { // 0x00,0x00,0x00,0xDD, // 0x00,0x00,0x00,0xE0, // 0x00,0x00,0x01,0x5C, // 0x00,0x00,0x00,0xE2 // }; FILE* file = fopen("E:/1.bin","wb"); assert(file); size_t len = 0; uint8_t* buf2 = ConvertToBinBuf(str,&len); fwrite(buf2,1,len,file); free(buf2); fclose(file); printf(".......................\n"); return 0; }
生成的二进制文件:
相关文章推荐
- [C/C++]_[十六进制字符串转换数值并写入文件]
- 将一个十六进制字符串转换为十进制数值的问题|| 以及C++中string转换成char*|| c++文件按行输入
- C++中数值--字符串间的转换
- 十六进制字符串与数值类型之间转换
- 如何:在十六进制字符串与数值类型之间转换
- C# 十六进制字符串与数值类型之间转换
- c++常用函数之 十六进制字符串转换为十进制
- C++字符串与数值——安全的类型转换扩展
- C++中数值--字符串间的转换
- java读取写入图片文件、byte[]、base64字符串、16进制字符串相互转换
- C# 十六进制字符串与数值类型之间转换
- C/C++中int/long/float/double数值类型与字符串互相转换
- 字节数组、数值和十六进制字符串的转换
- c++中字符串与数值的相互转换
- 如何:在十六进制字符串与数值类型之间转换(C# 编程指南)
- 如何:在十六进制字符串与数值类型之间转换(C# 编程指南MSDN)
- C++字符串与数值——安全的类型转换扩展
- 数值和字符串相互转换(C++ 数据类型转换技巧)
- 十六进制字符串转换为十进制数值
- c++字符串与数值之间的转换