2012-11-15 2 views
0

나 HEX로 정수 변환하지만 PHP에서 출력C++ 및 PHP는 HEX

C++ 상이한 C++에서이 코드 :

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <stdio.h> 

using namespace std; 

int main(){ 

    string str1("100106014020"); 
    int i; 

    i = atoi(str1.c_str()); 
    printf ("HEX value is %X", i); 

    return 0; 
} 

output: 
HEX value is 4EC88D44 

PHP :

<?php 
$num = '100106014020'; 
$nnum = (int)$num; 
echo printf ("%X",$nnum); 
?> 

출력 : 174EC88D4410

어떻게 내가 C에서 하나의 PHP로 동일한 16 진수 값을 얻을 수 + +?

+2

당신은 프로그래밍 오류 atoi''고려해야한다. –

+3

'100106014020'은 int의 최대 크기 인 –

+1

보다 크고 http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/에는이 경우에 어떤 일이 발생하는지 명시되어 있지 않습니다. – xtofl

답변

0

정수의 용량이 넘쳐 흐르고 있습니다. 대신에 길게 사용하십시오.

+0

long int i 또한 동일한 16 진수 값을 제공합니다. – krisdigitx

+0

atol을 사용해야합니다.;) atoi는 ints를 반환합니다. atol은 longs를 반환합니다. –

+0

사실 나는 C++ 코드를 변경하고 싶지 않습니다. PHP에서 같은 결과를 원합니다 ... – krisdigitx

3

전환이 ­ cee ­인지 여부를 알 수 없으므로 atoi을 사용하는 것은 프로그래밍 오류 일뿐입니다. 올바른 기능은 strtol (또는 strtoll)입니다. 수정 된 프로그램은 다음과 같아야합니다 : 나이 들어

#include <cstdlib> 
#include <cstdio> 
#include <cstring> 
#include <cerrno> 

int main() 
{ 
    const char * const str1 = "100106014020"; 
    char * e; 
    long i = std::strtol(str1, &e, 0); 

    if (e != 0) 
    { 
     std::printf("Conversion error: %s\n", strerror(errno)); 
    } 
    else 
    { 
     std::printf("Conversion succeeded, value = 0x%lX\n", i); 
    } 
} 

는 말한다 :

Conversion error: Numerical result out of range