진수 변환 구체화하십시오 정수 효율적으로 캜?

C 에서, 어떤 가장 효율적인 방법은 '또는' 이진 'unsigned int 의 문자열으로 변환하시겠습니까 붙여넣습니다 진수 숫자 부호 없는 긴'?

예를 들어, 나는 내가 원하는 ',' 한 'int value' 와 '0xfffffffe base10 4294967294'.

답변 16 개

편집: 이제, C++, 므스티스 호환됩니까 gnu 비사양 컴파일러에도 제공합니다. (http://otl. 끝)

(질문) 는 &quot, 가장 효율적인 way.&quot. # 39 의 OP doesn& 지정할 수 있는 플랫폼, t, 그는 그의 256 바이트 코드를 플래시 스토리지로서 컴파일하기를 RISC 기반 아트멜 칩.

(나 같은) 에게 애디슨에게 및 그 사이의 차이를 이해하는 가장 쉬운 way&quot "; 그리고, 가장 효율적인 way&quot &quot, 사람 등을 즐길 수 있게 한다.

static const long hextable[] = {
   [0 ... 255] = -1, // bit aligned access into this table is considerably
   ['0'] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, // faster for most modern processors,
   ['A'] = 10, 11, 12, 13, 14, 15,       // for the space conscious, reduce to
   ['a'] = 10, 11, 12, 13, 14, 15        // signed char.
};

/** 
 * @brief convert a hexidecimal string to a signed long
 * will not produce or process negative numbers except 
 * to signal error.
 * 
 * @param hex without decoration, case insensitive. 
 * 
 * @return -1 on error, or result (max (sizeof(long)*8)-1 bits)
 */
long hexdec(unsigned const char *hex) {
   long ret = 0; 
   while (*hex && ret >= 0) {
      ret = (ret << 4) | hextable[*hex++];
   }
   return ret; 
}

눈이 부시게 파르게 외부 라이브러리, 해야 할 필요하지 않습니다. 잘못된 문자 (대문자, 소문자 처리한다 hex 입력입니다 홀수 크기 (예: 0xfff) 및 최대 크기는 의해서만 컴파일러와의.

  • 더 비사양 mgcc 또는 c++컴파일러는 또는 컴파일러에도 돌림무늬 에스터블 declaration.* 수락하셔야 않는

첫 번째 기술서임을 대체하십시오 재장착합니다 (순응하는 게 더 긴) 버전:

static const long hextable[] = { 
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1, 0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
};

Orwellophile
John Carter
그는 8년 전 댓글을 달았습니다
0

내가 생각하는 '제대로' 에스터블 의사코드의 코드는 초기화 (그렇다면 it& # 39 의 가치가 있는 포인팅 아웃하려면), 또는 일부 난해한 어레이입니다 초기화 구문 I& 로만스였나 # 39 m, 익숙하지 않은?

davehayden
그는 8년 전 댓글을 달았습니다
1

정보기술 (it) 과 컴파일하십시오 확인해 보십시오! (스포일러: 작동하잖아)

hB0
그는 7년 전 댓글을 달았습니다
0

안드로이드 드크 구축하십시오 함께 컴파일하기를 아니다.

Orwellophile
그는 7년 전 댓글을 달았습니다
0

내가 믿을 수 있는 것이 무의미한 관찰을 통해 사람이었는가부텀 @hb0 응답하는지 막연한 및 답변: 이 대해 과태료 클랭 정리합니다. 하지만 22 가지 개의경고 that& # 39 의 예상된 것입니다.

hB0
그는 7년 전 댓글을 달았습니다
0

내가 안드로이드 드크 드크 구축하십시오 도구를 사용할 수 있는 나를 특별히 컴파일하십시오 않는다 - http://developer.android.com/tools/sdk/ndk/index.html 오류 어레이입니다 선언. I love the 표시되어도 하지만 난 그래서 다른 방법을 사용해야 했습니다 좋은 코드 부분을 사용할 수 없습니다. (단, 비효율적이었습니다). 칸트, 정확한 제공하십시오 컴파일 오류 됐다. (이미 제공했음 너회가 +1 마지막으로)

Orwellophile
그는 7년 전 댓글을 달았습니다
0

그냥 두 번째 줄의 코드와 @hb0 설명줄로 " [0.255] &quot. # 39 에 있는 정보기술 (it), 지, re 기도하세 you& 결코 잘못된 입력입니다.

Peter Cordes
그는 4년 전 댓글을 달았습니다
0

& # 39 표, 줄일 수 있습니다 '진수' 를 사용하여 색인에 0& # 39, 수 있다면 solaris. 못하였느뇨 투입물 사용할 수 있습니다. 혹시 'hex &amp. (~ 0x20) '를 대문자화 소문자보다 변환하십시오 (또한 이름 처리' & # 39, & # 39 9& # 39 0& # 39; -;; '). 간단한 예를 들어, 일부 조합으로의 전에 두 개의 ALU 운영체 인덱스화를. 또한 '긴' 보다 'int' 가장 좋을 것입니다. # 39 의 64bit x86-64 엔트리입니다 there& 필요 없음. (일반적으로 there& # 39 을 넘게 돼 8bit 항목: 가장 효율적인 x86, ARM 등의 cpu 제로 확장 바이트입니다 로드되는지 있다. 대한 지원 부족, t # 39 에 대한 지원을 의미하는 단어 로드되는지 정렬되지 않은 doesn& 나쁜거라 바이트입니다 로드되는지).

Orwellophile
그는 4년 전 댓글을 달았습니다
0

전체 집중식으로 x86_64 가 이를 지원하는 64 비트 word 넷윈을 안된다. Hex word 를 지원해야 하는 가장 큰 워드 크기를 일상적인 범용 컴파일러, 이는 16 비트 cpu 는 표시할지를 설치된 대부분의 컴파일러에도 최대 규모, 긴 대응됩니다 기본 단어 방관하겠나. 이 테이블 자체는 매우 프로세서별 성능 향상을 장부를요 크기 일치 할 수 있다. 실제로 사용할 수 있는 라인을 상관없이 테이블 크기는 2048년 바이트입니다 캐시에는 # 39, & # 39 유효함 입력입니다 나타내어지고, 0& .& # 39 9& # 39;;; 결과 두 개의 64 바이트 캐시 라인을 따라 경우 추가 캐시 라인.

Orwellophile
그는 4년 전 댓글을 달았습니다
0

@PeterCordes (그들위에 계속 셀명) 이 성능을 향상시킬 수 있는 매우 정렬되지 않은 바이트입니다 있거나 없을 수 있지만 있는 그대로 다시 프로세서 및 활용, 코드는 특정 일반적인 성능 괜찮은 제공합니다. # 39, & # 39 라고 투입물 valid& 관련해, 있다. 대다수의 C/C++ cve 네거잖아 똑같이 나올 것이라고 밝혔다. 설마 가장 효율적인 방법은 유효함 입력은 가정하고 있다. 또한 긴 서명됩니다 방황케 가능합니다. 또는 확인 결과 (입력 오류로 고말은 분명히 &lt, 0).

Peter Cordes
그는 4년 전 댓글을 달았습니다
0

물론 경로설정을 복귀해야 '긴' (또는 'intmax_t' to get a 유형을 좋겠다 '는 여전히 32bit 잡깐 64bit x86-64 indows 때문에 긴'). # 39 는 전혀 별개의 크기의 테이블 엔트리를 사용하여 의사 결정 및 that& 아닌, s what I 말한 함수은 반환 유형. 가도 돼 있지만, 어느 쪽이든 테이블에 대한 패딩 일반적으로 사용되지 않는 엔트리입니다 함께 실제 작업 세트, tlb 더 이어질 수 있는 경우 다른 决策 갭스 실패를 통해 데이터를 이렇게 모세야 네 페이지가 너무 많습니다. 어쨌든 there& # 39 의 핫 항목이 하나 이상의 캐시 라인 확장 룻을 이유가 없다.

Peter Cordes
그는 4년 전 댓글을 달았습니다
0

, 만약 당신이 떠난 아웃해야 &quot solaris. 투입물 오른길로 valid&quot, 중요한 단어를 수 있습니다. 예를 들어 만약 you& # 39, ve, ve 도달했음 및끝 이미 점검됨 범위 you& 여부를 확인할 수 있는 바, # 39 는 높여줍니까 이런 일이 있을 겁니다. 좋은 점을 미래의 어떤 일이 벌어질 경우 수정 코드를 실행하고 있는 잘못된 투입물 확인하지 않고 먼저 어쨌든요 으로 사용할 수 있는 '이' () 또는 룻을 시릭스 확인란. (이 경우 전체 표의 크기가 중요한 것이 아니라 0-9 와 a-f. 좋은 선택이 될 수 있다 ',' int8_t 아직 지원 - 1.). 가장 효율적인 way&quot 위해 &quot 목표로 하고 있습니다;;).

Orwellophile
그는 3년 전 댓글을 달았습니다
0

네 많은 점이 효력, 스피 @petercordes 않은 긴 '는' 항상 있는 32 비트. 이 '메리 페데프 intmax_t' 는 '대한' ('되는 등 필요한 스타디나이트') '에 있는 긴 긴', 그리고 내아기마저도 폴백합니다 &quot 부호 없는 unsigned int 또는 long&quot 특별히 질문과대답 클래식 방어, OP. (부품에 대한 실패했습니다. 서명되지 않은 것 같다). , 내가 택한 것으로 정의할 때, 가장 efficient&quot &quot 느슨하게 &quot 함께 가장 빠른 코드를 가장 작은 footprint."; 물론 어느 정도 함께 한 개인의 남겨두십시오 않는 것은 내가 사용하는 do 배열입니다 챨 및 캐스트 later. (예: 난 이걸 고드볼트 빼냅니다 제안하십시오.

Orwellophile
그는 3년 전 댓글을 달았습니다
0

https://godbolt.org/g/LoeRYU. 긴 긴 '로 바뀌는' 선 '은' 한 '챨 테이블에 대한 추가 조립품을 모프스스 rdx, 바이트입니다 PTR 에스터블 [rdx]'. # 39 의 경우 dig up 아두이노 볼 수 있는 내가 there& 통해 측정할 수 있는 차이? (뭐, 좋아, 틉프 꼭 이래야겠어요 list. 챨 버전 협력하였습니다 아두이노 같도다라고 메모리 부족한):)

Alex
그는 3년 전 댓글을 달았습니다
0

가장 효율적인 애디슨에게, 아니다. 이는 가장 많이 할 경우에만 변환에는 연속 완전히 이 거대한 공간을 차지합니다.

Orwellophile
그는 3년 전 댓글을 달았습니다
0
  • 왜 아무도 없는 상당한 변환, give a * @alex 할 수 있는 가장 효율적인 알고리즘을 찾기 정보 훗 (hoot)?

이거 드세요.

#include <stdio.h>
int main()
{
    char s[] = "fffffffe";
    int x;
    sscanf(s, "%x", &x);
    printf("%u\n", x);
}

Jared Burrows
Cloud Cho
그는 3년 전 댓글을 달았습니다
3

이는 기막히군 이 방법은 내가 전에 볼 수 없었다.

39 이 해야 할 경우, 스테드리브 don& 별로 없는 그런 합니다.

unsigned long hex2int(char *a, unsigned int len)
{
    int i;
    unsigned long val = 0;

    for(i=0;i<len;i++)
       if(a[i] <= 57)
        val += (a[i]-48)*(1<<(4*(len-1-i)));
       else
        val += (a[i]-55)*(1<<(4*(len-1-i)));

    return val;
}
참고: 이 코드는 대문자화 A-F 가정합니다. 렌 () 은 정수 32tb 또는 64bits 이상으로 긴 경우 작동하지 않습니다, 오류는 없습니다 트랩핑 불법 진수 문자를 사용할 수 있습니다.

Markus Safar
Patrick Schlüter
그는 8년 전 댓글을 달았습니다
2

39, & # 39 - 'a [i], [i] - & # 39 는 0&' 와 ',' A& # 39 +10 이 시스템에 사용하고, 또 작업하십시오 흔치 EBCDIC (그들은 여전히 존재하는).

Peter Cordes
그는 4년 전 댓글을 달았습니다
1

39, & # 39, & # 39 0& ',' 와 ',' 도 A& # 39, ASCII 코드를 만들 수 있는 사람들을 위한 자체 문서화, t 기억해둡니다 don& # 39 표.

Avr 의 마이크로컨트롤러 I wrote 다음과 같은 함수 등 쉽게 이해할 수 있도록 관련 글:

/**
 * hex2int
 * take a hex string and convert it to a 32bit number (max 8 hex digits)
 */
uint32_t hex2int(char *hex) {
    uint32_t val = 0;
    while (*hex) {
        // get current character then increment
        char byte = *hex++; 
        // transform hex character to the 4bit equivalent number, using the ascii table indexes
        if (byte >= '0' && byte <= '9') byte = byte - '0';
        else if (byte >= 'a' && byte <='f') byte = byte - 'a' + 10;
        else if (byte >= 'A' && byte <='F') byte = byte - 'A' + 10;    
        // shift 4 to make space for new digit, and add the 4 bits of the new digit 
        val = (val << 4) | (byte & 0xF);
    }
    return val;
}

예:

char *z ="82ABC1EF";
uint32_t x = hex2int(z);
printf("Number is [%X]\n", x);

는 출력: ! [입력하십시오. 이미지 여기에 설명을] [1]

Alex
그는 3년 전 댓글을 달았습니다
0

이는 비해 효율성이 더 Java 코드.

radhoo
그는 3년 전 댓글을 달았습니다
0

39, 그래서 내가 don& 제공할 수 있지만, 아마도 깜박하셨다고 일부 인수만 것 같지는 않다.

심각한 오류 / l '술어의 시달리고, 질문, 마치 일이 자주 일어난다. # 39 일이 있지만, 일반적으로는 doesn& common speech 의 맥락에서 특정 문제가 있어 가장 중요한 것은 없다.

39 로, s no such thing, hex value&quot &quot, there& 볼 수 있습니다. 소수점 value&quot 및 "; (또는 &quot hex number"; 소수점 number&quot 및 ";). &quot Hex"; 및 &quot decimal"; 속성 값을 표현할 수 있다. 한편 값 (또는 숫자임) 없는, 그래서 그들은 스스로 나타내줍니다 can& # 39, t be &quot hex"; 또는 &quot decimal";). 예를 들어, '0xF' 와 '15 의 표현 같은 수의 서로 다른 두 개의 C 언어의 문법' 이 있다.

꼭 이래야겠어요 짐작할 수 있는 질문을 하는 것은 제안됩니다 hex ASCII 변환하시겠습니까 운행에서어떠한 있다고 표현한 값 (예를 들면, 문자열) 를 ASCII 의 값을 소수점 표기 (또 다른 string). 그렇게 할 수 있는 방법 중 하나는 정수 중간 한 표현이 사용할 수 있습니다. 첫째, hex ASCII 의 정수 변환하십시오 표현을 충분하나니 크기 ("에서 스트라토. ',' like '그룹 함수를 사용하여 스트라토르) 한 후, 정수 꽂으십시오 변환하십시오 ascii 소수점 표기 (스프링스프 사용하여' ').

39 that& 경우, s not what you need to do, 그런 질문을 할 수 있기 때문에 구체화합니다 그림 아웃해야 마련했습니까 질문 길에 있다.

AnT
Peter Cordes
그는 4년 전 댓글을 달았습니다
0

난 또 질문을 읽고 있다 - hex 문자열이어야 &gt. # 39, t, 그렇다고 다른 소수 문자열이어야 doesn& 일치시킵니다 분입니다. 나는 그 질문에 답변 및 수락됨 편집됩니다 일치시킵니다 대부분의 다른 분입니다. 하지만, 문제는 이 string-&gt 문자열이어야 가릴 수 있는 경우 정수 표시됨과 수행됨 makes me wonder 거치지 않고 중간 단계로, 이진 (too big to a 'uint64_t 장착할 수 있는 숫자 (예:'). 갖고 있는 추가 문자열으로 다운되어도 소수 자리 그것은됐다 많이유 표시되어도 도왔으매 없는듯.

진수 십진수. 이 때문에, t # 39 의 온라인 컴파일러에도 don& 실행하십시오 won& # 39, 빗나갔다.

#include<stdio.h>
void main()
{
    unsigned int i;
    scanf("%x",&i);
    printf("%d",i);
}

Baz
rishabh kedia
그는 9년 전 댓글을 달았습니다
1

dis 사용할 수 있는 건 이 정도는 직접 점검됩니다 떨어졌 쇱そ nd 쇱そ 보스트리 작동하잖아.

예를 들어, 내가 사용하는 데 필요한 같은 대규모 Hex 문장열 [스테르툴] (http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul.html).

@Eric &gt. 이유는 솔루션을 사용할 수 있는 지역 코드를 가져오는 꾨옒?? 물론, it& # 39 의 추악한 않을 수 있는 가장 빠른 길은 있다고 하지만, s # 39 더 교육적인 그것을하지 it& &quot strtol"; 또는 &quot sscanf";). 뭔가 일이 어떻게 하면 이 교도관님도요 학습하겠습니다 아래 후드요.

내가 그동안 don& t # 39, 반대 합니다 진정되고 있지만 내 생각엔 솔루션 같아요 왜 it& # 39 로, s, s # 39 더 실용적인 it& 일어나고 있기 때문이다. 투표 이해할 수 있는 것은 &quot best"; answer will be more 지정값이 위로 떨어졌으며, 부동 소수점 아래 대한 대답을 어떻게 될지는 후드요 (또는 발생할 수 있는 것이 아니다), it& 분석할 수 있는 최선의 방법은 없습니다 # 39 의 말해둘꼐요 진수 숫자를 운영 시스템.

다시 말하지만, 나는 아무 문제가 없는 것 같습니다;; s # 39 there& don& # 39 에서 교육 측면에서 볼 때, 나는 확실히 대답을 wouldn& # 39, t (및 didn& # 39, t) 투표에서 끕니다. # 39, 일부 사람들은 언제나 및 정지점을 don& 수 없다 해서 마음에 글을 didn& # 39, 직원 중 한 분입니다. 그럴 수도 있어요.

제 대답은 당신의 모든 것을 느낄 수 있지만, 내가 투표한 것에 대해서도 좀 더 아래로 그러니까말이야 it& # 39 의 재미 없는 something& # 39 의 경우 특히 하나님께용서를 왜 투표를 끄고 있다 [아무도 대답] (https://stackoverflow.com/questions/7430/suggestion-link-to-feature-requests-on-uservoice # 7457).

Community
alternative
그는 10년 전 댓글을 달았습니다
3
  • 1 은 주석이 있는 이유는 있다.
Derek Park
그는 10년 전 댓글을 달았습니다
7

2008년 8월 사이트 새것이었어 및 구현됩니까 설명을 하지 않았다.

#include "math.h"
#include "stdio.h"
///////////////////////////////////////////////////////////////
//  The bits arg represents the bit say:8,16,32...                                                                                                              
/////////////////////////////////////////////////////////////
volatile long Hex_To_Int(long Hex,char bits)
{
    long Hex_2_Int;
    char byte;
    Hex_2_Int=0;

    for(byte=0;byte<bits;byte++)
    {
        if(Hex&(0x0001<<byte))
            Hex_2_Int+=1*(pow(2,byte));
        else
            Hex_2_Int+=0*(pow(2,byte));
    }

    return Hex_2_Int;
}
///////////////////////////////////////////////////////////////
//                                                                                                                  
/////////////////////////////////////////////////////////////

void main (void)
{
    int Dec;   
    char Hex=0xFA;
    Dec= Hex_To_Int(Hex,8);  //convert an 8-bis hexadecimal value to a number in base 10
    printf("the number is %d",Dec);
}

Markus Safar
Sunday Efeh
그는 8년 전 댓글을 달았습니다
0

이 코드는 데스말 에사데스말 변환합니다. 아니 복잡한 코딩. 단순하지만 작동합니다.

Patrick Schlüter
그는 8년 전 댓글을 달았습니다
2

세상에, 최악의 구현, ve I& # 39 이것은 아마도 hex 12월 이제까지 본 것. '탕' 농담하십니까? 종종 '탕, 탕 (a, b) = exp 구현됩니까 것을 알고 있다 (b * log (a))'. 하지만 이미 많은 작업이 완료되지 않더라도 두 정수, 변환, 특히 현대의 프로세서에서.

Peter Cordes
그는 4년 전 댓글을 달았습니다
0

참고로 '있다' 는 Hex_To_Int 입력입니다 비호환성의 기본 2 비츠트링 저장됩니까 '긴'. 이 정수 변환됩니다 hex 구체화하십시오 로 컴파일 타임에! 이 &quot conversion"; '진수' 로 더 잘 수 있는 것은 매우 값비싼 op 없습니다. 기록되었으므로 복귀하십시오.

이 시도하시겠습니까 변환하십시오 소수점 Hex 의 수

    #include<stdio.h>
    #include<conio.h>

    int main(void)
    {
      int count=0,digit,n,i=0;
      int hex[5];
      clrscr();
      printf("enter a number   ");
      scanf("%d",&n);

      if(n<10)
      {
          printf("%d",n);
      }

      switch(n)
      {
          case 10:
              printf("A");
            break;
          case 11:
              printf("B");
            break;
          case 12:
              printf("B");
            break;
          case 13:
              printf("C");
            break;
          case 14:
              printf("D");
            break;
          case 15:
              printf("E");
            break;
          case 16:
              printf("F");
            break;
          default:;
       }

       while(n>16)
       {
          digit=n%16;
          hex[i]=digit;
          i++;
          count++;
          n=n/16;
       }

       hex[i]=n;

       for(i=count;i>=0;i--)
       {
          switch(hex[i])
          {
             case 10:
                 printf("A");
               break;
             case 11:
                 printf("B");
               break;
             case 12:
                 printf("C");
               break;
             case  13:
                 printf("D");
               break;
             case 14:
                 printf("E");
               break;
             case 15:
                 printf("F");
               break;
             default:
                 printf("%d",hex[i]);
          }
    }

    getch();

    return 0;
}

Markus Safar

Int main (void) '' void main () '을 고려해보십시오 변경'

Peter Cordes
그는 4년 전 댓글을 달았습니다
0

decimal-&gt, hex 것은 훨씬 쉽습니다. 테이블 검색 변환하십시오 hex digit 에서 사용할 수 있습니다 '스위치' 를 4bit 정수 없이 거대한. '& # 39, & # 39, [] = {챨 에스터블 0& 1& # 39, & # 39 a& # 39, & # 39.,,, # 39, & # 39 b& # 39 f& # 39,,. printf ',' 와 '대신' '} 푸트처 사용할 수 있습니다! 또한, 당신의 첫 스위치였습니다 에 버그가: '11 그리고 12' 는 그래서 16-&gt 위해 그곳에 B&quot ";; f&quot &quot, ','. /facepalm

&gt. 코드 솔루션을 사용할 수 있는 이유는 &gt. 아래로 갈수록 투표한? 물론, it& # 39 s ugly. &gt. .

아마도 그 때문에 이 아니라, 교육, t # 39 部门是这样的 isn& doesn& # 39, t 작동합니까. 또한, 대부분의 사람들이 하는 의심이 don& 편집하십시오 t # 39, 나 같은 힘을 가지고 현재 (및 필요 = 순위 의해 보면 결코).

39 를 사용할 수 있지만, s 어레이에서는 优秀 효율성을 위해 that& 언급되지 않은 이 코드.

또한 그렇게 작동하지 않을 경우 계좌에 수행하지 않습니다 위쪽과 아래쪽 예를 들어 있는 질문이예요 제공 펠릭스 포포프

@Eric 정말 멋진 글 올릴 수 있을 것으로 보고, C, I 은 실제로 &gt 마법사에서는 정렬하려면 같이 자세히, 지금 내가 한 적은 있지만, 동시에 &quot manually".

뭐, C # 39 m no. # 39 here& I& 구루, 하지만, s what I 지었지.

unsigned int parseHex(const char * str)
{
    unsigned int val = 0;
    char c;

    while(c = *str++)
    {
        val <<= 4;

        if (c >= '0' && c <= '9')
        {
            val += c & 0x0F;
            continue;
        }

        c &= 0xDF;
        if (c >= 'A' && c <= 'F')
        {
            val += (c & 0x07) + 9;
            continue;
        }

        errno = EINVAL;
        return 0;
    }

    return val;
}

당초 예정에 없는 대신 내가 더 많았던 비스마스킹 비교, 하지만 난 농담하십니까 비스마스킹 어느 비교한 최신 하드웨어 보다.

Derek Park
Martin York
그는 12년 전 댓글을 달았습니다
0

4 개의 불만. 1) 컴파일하십시오 않는다. 2) 처리하지 Id 가 소문자 3) 작동하지 않습니다 (A = &gt. 1). 4) 잘못된 문자는 그냥 무시됨! 아니하였으매 점심시간요 it?

Derek Park
그는 12년 전 댓글을 달았습니다
0

다 읽었어요? # 39, 이 때문에 실제로 &quot, I didn& 컴파일하십시오 예증의표적으로 꽤 큰 mistakes.&quot 일부 어떻게 할 수 없다. # 39, t 테스트 didn& 그러하매 기초적이죠.

Derek Park
그는 12년 전 댓글을 달았습니다
0

여깄군. 내가 패치됨 it up. 이미 처리됩니까 애디슨에게 소문자 c = 0xDF&quot &quot 통해 &;; 발표했다. 여러 방법으로 표시되어도 깨졌다.

Roland Illig
그는 10년 전 댓글을 달았습니다
0

5 불만입니까: Ansi C 의 경우 프로그램 (글자셋 에서는 ascii 기반 실행 할 수 있으며, 보장할 수 없음), 'A& # 39, & # 39 보장은 없다. + 1 = & # 39, B& # 39 '또는' (a& # 39, & # 39, 그. &amp. 0xDF) = (A& # 39, & # 39. &amp. 0xDF) '.

기본적으로 기록된 대로 전에는요, 하나는 효율성을 최적화하는 따라 달라집니다.

선의 설비를 갖추고 없는 환경으로 작업할 때 오티밍 가공할지, 표준 라이브러리 코드의 한 빠르고 더러운 옵션에만 다음과 같을 수 있습니다.

// makes a number from two ascii hexa characters
int ahex2int(char a, char b){

    a = (a <= '9') ? a - '0' : (a & 0x7) + 9;
    b = (b <= '9') ? b - '0' : (b & 0x7) + 9;

    return (a << 4) + b;
}

. 여기서 더 스레드할 비슷한. https://stackoverflow.com/a/58253380/5951263

진수 숫자를 십진수 여러모로 C 로 변환할 수 있습니다. 이 방법은 하나의 진수 숫자 나라를 위해 정수. 개인적으로 단순하고 작은 것으로 나타났습니다.

다음은 진수 숫자를 십진수 로 변환하기 위한 코드 예제를 통해 "고 말했다.

#include <stdio.h>

int main(){
    unsigned char Hexadecimal = 0x6D;   //example hex number
    int Decimal = 0;    //decimal number initialized to 0

        Decimal = (int) Hexadecimal;  //conversion

    printf("The decimal number is %d\n", Decimal);  //output
    return 0;
}

이 모두 사용할 수 있도록 현재 유일하게 수행됨 소문자 그것의 슈퍼.

cout << "\nEnter a hexadecimal number: ";
cin >> hexNumber;
orighex = hexNumber;

strlength = hexNumber.length();

for (i=0;i<strlength;i++)
{
    hexa = hexNumber.substr(i,1);
    if ((hexa>="0") && (hexa<="9"))
    {
        //cout << "This is a numerical value.\n";
    }
    else
    {
        //cout << "This is a alpabetical value.\n";
        if (hexa=="a"){hexa="10";}
        else if (hexa=="b"){hexa="11";}
        else if (hexa=="c"){hexa="12";}
        else if (hexa=="d"){hexa="13";}
        else if (hexa=="e"){hexa="14";}
        else if (hexa=="f"){hexa="15";}
        else{cout << "INVALID ENTRY! ANSWER WONT BE CORRECT\n";}
    }
    //convert from string to integer

    hx = atoi(hexa.c_str());
    finalhex = finalhex + (hx*pow(16.0,strlength-i-1));
}
cout << "The hexadecimal number: " << orighex << " is " << finalhex << " in decimal.\n";