【发布时间】:2019-10-23 11:12:48
【问题描述】:
我正在将一个正常工作的 C++ 程序转换为 php。现在,尽管大多数程序都可以正常工作,但我在其中的一个方面遇到了问题。
在 C++ 中工作的代码在 php 中给出的结果不同。 这是为了稍后在我的代码中写入二进制文件。
这是 C++ 代码和结果。
C++
char test;
test = 16;
test+=(char)131;
std::cout << (int)test << endl;
Result = -109
这是 php 中的等效代码。
PHP
$test = chr(0);
$test = 16;
$test+= chr(131);
echo (int)$test;
Result = 16
我猜这可能与 unicode 编码给我错误的结果有关。结果应该是 -109,因为我的 C++ 程序可以正常工作,但我在 php 中没有得到相同的结果。
当我在 C++ 中 cout (int)(char)131 时,我得到 -125,但如果我在 php 中回显 chr(131),我得到 0;
有没有办法让我的 php 输出和我的 C++ 一样?
【问题讨论】:
-
如果你在 C++ 中有这样的代码,那么你的程序已经够糟糕了,你应该尝试从头开始重写 PHP 解决方案,而不是忠实于 C++ 的翻译。
-
可能的溢出是 c++ 中未定义的行为吗?
-
据我所知,这是 C++ 中未定义的行为。有符号溢出的结果是未定义的。如果它按预期工作,那么你很幸运,但下一次运行时行为可能会改变。 stackoverflow.com/questions/16188263/…
-
仅仅因为它似乎只适用于你的情况,一个特定的编译器构建了一组特定的优化和一个特定的目标,并不意味着它适用于所有编译器、所有优化和所有目标。 UB 在这种情况下很棘手。
-
PHP 转换例如
12 + "12"到12 + 12。您的声明$test+= chr(131);等同于$test = 16 + chr(131)。chr(131)无法转换为数字,因此结果为16。