二进制值和十六进制字符串相互转换的C++代码

 1 #include <iostream>
 2 #include <string>
 3 #include <stdint.h>
 4
 5 using namespace std;
 6
 7 string BinToHex(const string &strBin, bool bIsUpper = false)
 8 {
 9     string strHex;
10     strHex.resize(strBin.size() * 2);
11     for (size_t i = 0; i < strBin.size(); i++)
12     {
13         uint8_t cTemp = strBin[i];
14         for (size_t j = 0; j < 2; j++)
15         {
16             uint8_t cCur = (cTemp & 0x0f);
17             if (cCur < 10)
18             {
19                 cCur += ‘0‘;
20             }
21             else
22             {
23                 cCur += ((bIsUpper ? ‘A‘ : ‘a‘) - 10);
24             }
25             strHex[2 * i + 1 - j] = cCur;
26             cTemp >>= 4;
27         }
28     }
29
30     return strHex;
31 }
32
33 string HexToBin(const string &strHex)
34 {
35     if (strHex.size() % 2 != 0)
36     {
37         return "";
38     }
39
40     string strBin;
41     strBin.resize(strHex.size() / 2);
42     for (size_t i = 0; i < strBin.size(); i++)
43     {
44         uint8_t cTemp = 0;
45         for (size_t j = 0; j < 2; j++)
46         {
47             char cCur = strHex[2 * i + j];
48             if (cCur >= ‘0‘ && cCur <= ‘9‘)
49             {
50                 cTemp = (cTemp << 4) + (cCur - ‘0‘);
51             }
52             else if (cCur >= ‘a‘ && cCur <= ‘f‘)
53             {
54                 cTemp = (cTemp << 4) + (cCur - ‘a‘ + 10);
55             }
56             else if (cCur >= ‘A‘ && cCur <= ‘F‘)
57             {
58                 cTemp = (cTemp << 4) + (cCur - ‘A‘ + 10);
59             }
60             else
61             {
62                 return "";
63             }
64         }
65         strBin[i] = cTemp;
66     }
67
68     return strBin;
69 }
70
71 int main()
72 {
73     string strBin = "[email protected]#$%^&*()_+~`1234567890-=";
74     string strHex = "21402324255E262A28295F2B7E60313233343536373839302D3D";
75
76     string strBinToHex = BinToHex(strBin);
77     cout << strBinToHex << endl;
78     strBinToHex = BinToHex(strBin, true);
79     cout << strBinToHex << endl;
80
81     string strHexToBin = HexToBin(strHex);
82     cout << strHexToBin << endl;
83
84     return 0;
85 }
时间: 2024-08-05 11:28:15

二进制值和十六进制字符串相互转换的C++代码的相关文章

Java 十六进制字符串-HexString

http://my.oschina.net/xinxingegeya/blog/287476 byte[]和十六进制字符串相互转换 Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示. 所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果 new String(H) + new String(L). 同理,相反的转换也是将两个16进制字符

android byte字节数组转换十六进制字符串(物联网开发总结)

想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成十六进制字符串,或者最后又是十进制数据.都是根据双方的协议来开发的.那么我发送过去的数据也需要,经过特殊转换成byte字节发过去,硬件那边收到不至于乱码的数据. 1.硬件调试发给android这边是十六进制数据 原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 00 0C 13 78 56 34 12 0C 3B 78 34 12 0C 26 78 56 34 1

【华为练习题】十六进制字符串形式转为内存值形式

[华为练习题]十六进制字符串形式转为内存值形式 题目 功能:将十六进制字符串形式内容转为内存值形式(注:pBuffer的内存申请由调用者保证) 输入:szHexText:十六进制字符串形式,如: "6566" 输出:dataOutput,其中:内存值形式Buffer,即内存的{0x65, 0x66} 返回:返回转换成功的buffer的有效字节数 解答 #include <iostream> #include <string> using namespace st

用Java语言实现对十六进制字符串异或运算

前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作.相信很多上班族都会有这种感觉.最近对NFC进行写卡操作,需要计算一个校验位.一般情况下,校验位多数是由前几个字节进行异或运算所得. 现在我就先说一下我使用的场景: 把一个16字节的数据写到CPU卡(如交通卡)里面,最后一字节是校验码---前十五字节异或. 我开始从网上找了一些别人写的算法发现计算后结果不对,或者就是写的太复杂了,于是自己就写了一个,感觉也比较简单,现在分享给大家,希望一起交流一下. 第一节:什么是异或运算(主要摘自百度

整型和字符串相互转换

我们写程序的时候经常会遇到整型和字符串相互转换的问题,这里要用到几个函数,itoa(),atoi(),sprintf()下面来介绍下这几个函数的具体用法! itoa 功 能:把一整数转换为字符串 用 法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的整数. radix: 是基数的意思,即

VC中,如何将十六进制字符串转换为十进制数?

原文链接:http://blog.csdn.net/bennyfun79/article/details/6934843 在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如: 1 char *ptr="0x11"; 2 int n=0; 3 //我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: view plaincopy to clipboardprint? 1 char *ptr="123";

c程序十六进制字符串转换为整数与反转

字符串转整数使用sscanf int value = 0; char *buf = "1d5ce"; sscanf (buf, "%x", &value); printf ("Hex value is:%x\n", value); 整数转字符串使用sprintf int num = 0; char buf[10] = {}; num = 120270; sprintf (buf, "%x", num); //打印 bu

十六进制字符串转十进制整数,诡异的问题,Linux和Windows结果不同

static int HexAToInt(char *str, int length) { char  revstr[16] = { 0 };  //根据十六进制字符串的长度,这里注意数组不要越界 int   num[16] = { 0 }; int   count = 1; int   result = -1; if (NULL != str) { strncpy(revstr, str, length); for (int i = length - 1; i >= 0; i--) { if

在十六进制字符串与数值类型之间转换

1.获取‘字符串’中的每个字符的十六进制值. 2.获取与十六进制字符串中的每个值对应的字符.. 3.将十六进制string转换为整形. 4.将十六进制string转换为浮点型. 5.将字节数组转换为十六进制string. 此案例输入中的每个字符的是十六进制值.先将string分析为字符数组,然后对每个字符调用Inter32(char)以获取相应的数字值. static void Main(string[] args) { string input = "Hello World!"; c