[C/C++]_[输出内存数据的二进制和十六进制的字符串表示]
2014-07-11 11:23
1701 查看
场景:
1. 在读取文件或内存时,有时候需要输出那段内存的十六或二进制表示进行分析。
2. 标准的printf没有显示二进制的,而%x显示有最大上限,就是8字节,超过8字节就不行了。
test_binary_hex.cpp
输出:
1. 在读取文件或内存时,有时候需要输出那段内存的十六或二进制表示进行分析。
2. 标准的printf没有显示二进制的,而%x显示有最大上限,就是8字节,超过8字节就不行了。
test_binary_hex.cpp
#include <stdlib.h> #include <string.h> #include <stdio.h> #include <assert.h> #include <stdint.h> #include <iostream> std::string ToBinaryString(const uint8_t* buf,int len) { int output_len = len*8; std::string output; const char* m[] = {"0","1"}; for(int i = output_len - 1,j = 0; i >=0 ; --i,++j) { output.append(m[((uint8_t)buf[j/8] >> (i % 8)) & 0x01],1); } return output; } std::string ToHexString(const uint8_t* buf,int len,std::string tok = "") { std::string output; char temp[8]; for (int i = 0; i < len; ++i) { sprintf(temp,"0x%.2x",(uint8_t)buf[i]); output.append(temp,4); output.append(tok); } return output; } int main(int argc, char const *argv[]) { printf("0x%.2x\n",1); uint8_t buf[] = {0x80,0x0f,0x51,0xEE,0xA7}; std::string output = ToBinaryString(buf,2); std::string output_hex = ToHexString(buf,2,":"); std::cout << output << std::endl; std::cout << output_hex << std::endl; assert(!strcmp(output.c_str(),"1000000000001111")); output = ToBinaryString(buf,3); std::cout << output << std::endl; assert(!strcmp(output.c_str(),"100000000000111101010001")); output = ToBinaryString(buf,4); assert(!strcmp(output.c_str(),"10000000000011110101000111101110")); std::cout << output << std::endl; output = ToBinaryString(buf,5); assert(!strcmp(output.c_str(),"1000000000001111010100011110111010100111")); std::cout << output << std::endl; return 0; }
输出:
0x01 1000000000001111 0x80:0x0f: 100000000000111101010001 10000000000011110101000111101110 1000000000001111010100011110111010100111
相关文章推荐
- [C/C++]_[输出内存数据的二进制和十六进制的字符串表示]
- 输出内存数据的二进制和十六进制的字符串表示
- C/C++直接输出一个数据的十六进制、八进制和二进制
- c++两个常用函数:1.二进制字符串2 hex(十六进制)。2. 栈变量字符串2堆变量
- C/C++二进制,八进制, 十进制和十六进制的表示方法
- 使用移位操作把十进制转换为二进制与十六进制字符串输出
- c++中输出十进制,十六进制,八进制。默认输出十进制的数据和左右对齐
- ACM457现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。输入 第一行只有一个整数m(m<=10),表示测试数据组数。
- c++两个常用函数:1.二进制字符串2 hex(十六进制)。2. 栈变量字符串2堆变量
- 数据在内存中的二进制表示和IEEE754
- 输入一个表示十六进制的字符串,转换为十进制的整数输出。
- C++输出二进制、十进制、八进制和十六进制以及左移右移运算符的总结
- 二进制值和十六进制字符串相互转换的C++代码
- C语言应用:将128位二进制数据转换为十六进制输出
- c++ 二进制 八进制 十进制 十六进制 输出
- C++输出 int 型的二进制表示
- C++ leveldb Slice的数据类型 不一定 必须是字符串。也可以是二进制
- c++下使用CString将字符串转二进制、八进制、十进制、十六进制
- 数据在内存中始终是以二进制形式存放的。数值是以补码表示的
- C/C++二进制、十进制、十六进制的表示方法