如何从字符串十六进制中获取十进制
How can I get decimal from string hexdecimal
如何从字符串十六进制中获取十进制:
我有unsigned char* hexBuffer = "eb89f0a36e463d";.
我有unsigned char* hex[5] ={'','x'};.
我从前两个字符"eb"
复制到hexBuffer
hex[2] = 'e'; hex[3] = 'b';
.
现在我在十六进制中有字符串"xeb"
或"xEB"
。
众所周知0xEB
它的十进制,我们可以转换为235
十进制。
如何将"xEB"
转换为235(int)
?
(感谢杰德华兹(
我的答案(也许对某人有用(:
/*only for lower case & digits*/
unsigned char hash[57] ="e1b026972ba2c787780a243e0a80ec8299e14d9d92b3ce24358b1f04";
unsigned char chr =0;
int dec[28] ={0}; int i = 0;int c =0;
while( *hash )
{
c++;
(*hash >= 0x30 && *hash <= 0x39) ? ( chr = *hash - 0x30) : ( chr = *hash - 0x61 + 10);
*hash++;
if ( c == 1) dec[i] = chr * 16; else{ dec[i] += chr; c = 0; dec[i++];}
}
你想要
的函数被称为sscanf.
http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/
int integer;
sscanf(hexBuffer, "%x", &integer);
在 C++11 中,您可以使用其中一个字符串到无符号整型和整型转换函数:
long i = std::stol("ff", nullptr, 16); // convert base 16 string. Accepts 0x prefix.
当然,这要求字符串表示一个数字,该数字可以适合表达式的 LHS 上的整数类型。
通常,我看到hex2dec函数的自制实现如下所示:
#include <stdio.h>
unsigned char hex2dec_nibble(unsigned char n)
{
// Numbers
if(n >= 0x30 && n <= 0x39)
{
return (n-0x30);
}
// Upper case
else if(n >= 0x41 && n <= 0x46)
{
return (n-0x41+10);
}
// Lower case
else if(n >= 0x61 && n <= 0x66)
{
return (n-0x61+10);
}
else
{
return -1;
}
}
int main()
{
unsigned char t;
t = '0'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'A'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'F'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'G'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'a'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'f'; printf("%c = %dn", t, hex2dec_nibble(t));
t = 'g'; printf("%c = %dn", t, hex2dec_nibble(t));
t = '='; printf("%c = %dn", t, hex2dec_nibble(t));
}
其中显示:
0 = 0
A = 10
F = 15
G = 255
a = 10
f = 15
g = 255
= = 255
我将把它留给你一个练习,让你从半字节到字节,然后从字节到任意长度的字符串。
注意:我只使用#include
和printf
来演示hex2dec_nibble
函数的功能。 没有必要使用这些。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- visual在c++中将十进制数转换为二进制数
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 获取Unicode字符C++的十进制值
- 从包含表示约 64 GB 值的十进制数的 String 变量中获取值
- 如何从字符串十六进制中获取十进制
- Arduino:从两个十进制字符串中获取十六进制值