C 에서, 어떤 가장 효율적인 방법은 '또는' 이진 'unsigned int 의 문자열으로 변환하시겠습니까 붙여넣습니다 진수 숫자 부호 없는 긴'?
예를 들어, 나는 내가 원하는 ',' 한 'int value' 와 '0xfffffffe base10 4294967294'.
운영까지도 '스트라토르' 또는 '스테르툴'. 또한 bsbab-unix 맨페이지
편집: 이제, C++, 므스티스 호환됩니까 gnu 비사양 컴파일러에도 제공합니다. (http://otl. 끝)
(질문) 는 ", 가장 효율적인 way.". # 39 의 OP doesn& 지정할 수 있는 플랫폼, t, 그는 그의 256 바이트 코드를 플래시 스토리지로서 컴파일하기를 RISC 기반 아트멜 칩.
(나 같은) 에게 애디슨에게 및 그 사이의 차이를 이해하는 가장 쉬운 way" "; 그리고, 가장 효율적인 way" ", 사람 등을 즐길 수 있게 한다.
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) 및 최대 크기는 의해서만 컴파일러와의.
첫 번째 기술서임을 대체하십시오 재장착합니다 (순응하는 게 더 긴) 버전:
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
};
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 이상으로 긴 경우 작동하지 않습니다, 오류는 없습니다 트랩핑 불법 진수 문자를 사용할 수 있습니다.
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);
심각한 오류 / l '술어의 시달리고, 질문, 마치 일이 자주 일어난다. # 39 일이 있지만, 일반적으로는 doesn& common speech 의 맥락에서 특정 문제가 있어 가장 중요한 것은 없다.
꼭 이래야겠어요 짐작할 수 있는 질문을 하는 것은 제안됩니다 hex ASCII 변환하시겠습니까 운행에서어떠한 있다고 표현한 값 (예를 들면, 문자열) 를 ASCII 의 값을 소수점 표기 (또 다른 string). 그렇게 할 수 있는 방법 중 하나는 정수 중간 한 표현이 사용할 수 있습니다. 첫째, hex ASCII 의 정수 변환하십시오 표현을 충분하나니 크기 ("에서 스트라토. ',' like '그룹 함수를 사용하여 스트라토르) 한 후, 정수 꽂으십시오 변환하십시오 ascii 소수점 표기 (스프링스프 사용하여' ').
@Eric >. 이유는 솔루션을 사용할 수 있는 지역 코드를 가져오는 꾨옒?? 물론, it& # 39 의 추악한 않을 수 있는 가장 빠른 길은 있다고 하지만, s # 39 더 교육적인 그것을하지 it& " strtol"; 또는 " sscanf";). 뭔가 일이 어떻게 하면 이 교도관님도요 학습하겠습니다 아래 후드요.
내가 그동안 don& t # 39, 반대 합니다 진정되고 있지만 내 생각엔 솔루션 같아요 왜 it& # 39 로, s, s # 39 더 실용적인 it& 일어나고 있기 때문이다. 투표 이해할 수 있는 것은 " 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).
#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);
}
>. 코드 솔루션을 사용할 수 있는 이유는 >. 아래로 갈수록 투표한? 물론, it& # 39 s ugly. >. .
아마도 그 때문에 이 아니라, 교육, t # 39 部门是这样的 isn& doesn& # 39, t 작동합니까. 또한, 대부분의 사람들이 하는 의심이 don& 편집하십시오 t # 39, 나 같은 힘을 가지고 현재 (및 필요 = 순위 의해 보면 결코).
또한 그렇게 작동하지 않을 경우 계좌에 수행하지 않습니다 위쪽과 아래쪽 예를 들어 있는 질문이예요 제공 펠릭스 포포프
이 시도하시겠습니까 변환하십시오 소수점 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;
}
@Eric 정말 멋진 글 올릴 수 있을 것으로 보고, C, I 은 실제로 > 마법사에서는 정렬하려면 같이 자세히, 지금 내가 한 적은 있지만, 동시에 " 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;
}
당초 예정에 없는 대신 내가 더 많았던 비스마스킹 비교, 하지만 난 농담하십니까 비스마스킹 어느 비교한 최신 하드웨어 보다.
진수 숫자를 십진수 여러모로 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;
}
기본적으로 기록된 대로 전에는요, 하나는 효율성을 최적화하는 따라 달라집니다.
선의 설비를 갖추고 없는 환경으로 작업할 때 오티밍 가공할지, 표준 라이브러리 코드의 한 빠르고 더러운 옵션에만 다음과 같을 수 있습니다.
// 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
이 모두 사용할 수 있도록 현재 유일하게 수행됨 소문자 그것의 슈퍼.
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";