如何从字符串十六进制中获取十进制

How can I get decimal from string hexdecimal

本文关键字:获取 十进制 十六进制 字符串      更新时间:2023-10-16

如何从字符串十六进制中获取十进制:
我有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

我将把它留给你一个练习,让你从半字节到字节,然后从字节到任意长度的字符串。

注意:我只使用#includeprintf来演示hex2dec_nibble函数的功能。 没有必要使用这些。