0

私は整数をHEXに変換するc ++のこのコードですが、phpの出力は異なります

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++ と同じ HEX 値を PHP で取得するにはどうすればよいですか?

4

2 に答える 2

3

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
于 2012-11-15T15:16:55.853 に答える
0

整数の容量をオーバーしています。代わりに long を使用してください。

于 2012-11-15T15:13:31.007 に答える