3

文字列 hexdecimal から 10 進数を取得するにはどうすればよいですか:
I have unsigned char* hexBuffer = "eb89f0a36e463d";. And I have unsigned char* hex[5] ={'\\','x'};.
I copy from hexBufferfirst two char "eb"to hex[2] = 'e'; hex[3] = 'b';.
今、私は文字列"\xeb"または"\xEB"16進数を持っています。私たちは皆、その ahexdecimal を
知っているので、 10 進数に変換できます。 0xEB235

"\xEB"に変換するにはどうすればよい235(int)ですか?

( jedwardsのおかげで)
私の答え(多分それは誰かに役立つでしょう):

/*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++];}  
}
4

3 に答える 3

8

必要な関数が呼び出されますsscanf.

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

int integer;
sscanf(hexBuffer, "%x", &integer);
于 2012-05-20T03:36:27.390 に答える
5

C++11 では、文字列から符号なし整数型への変換関数と整数変換関数のいずれかを使用できます。

long i = std::stol("ff", nullptr, 16); // convert base 16 string. Accepts 0x prefix.

もちろん、これには文字列が式の LHS の整数型に収まる数値を表している必要があります。

于 2012-05-20T08:11:20.093 に答える
4

通常、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 = %d\n", t, hex2dec_nibble(t));
    t = 'A';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = 'F';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = 'G';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = 'a';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = 'f';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = 'g';  printf("%c = %d\n", t, hex2dec_nibble(t));
    t = '=';  printf("%c = %d\n", t, hex2dec_nibble(t));
}

どちらが表示されますか:

0 = 0
A = 10
F = 15
G = 255
a = 10
f = 15
g = 255
= = 255

ニブルからバイトに、次にバイトから任意の長さの文字列に移動するための演習として残します。

注:関数の機能を説明するためにのみ#includeとを使用しました。これらを使用する必要はありません。printfhex2dec_nibble

于 2012-05-20T04:04:04.267 に答える