c++ and php HEX

c++ and php HEX

本文关键字:HEX php and c++      更新时间:2023-10-16

i 这段代码在 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

如何在 php 中获得与 C++ 中相同的十六进制值?

使用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: %sn", strerror(errno));
    }
    else
    {
        std::printf("Conversion succeeded, value = 0x%lXn", i);
    }
}

对我来说,这说:

Conversion error: Numerical result out of range

你溢出了整数的容量。 请改用长整型。