首页 > 解决方案 > 为什么我的 php 代码输出与使用 chr 的 C++ 不同

问题描述

我正在将一个工作的 C++ 程序转换为 php。现在,即使大多数程序都有效,但我在其中一个方面遇到了麻烦。

在 C++ 中工作的代码在 php 中没有给出相同的结果。这是为了稍后在我的代码中写入二进制文件。

这是 C++ 代码和结果。

C++
char test;
test = 16;
test+=(char)131;
std::cout << (int)test << endl;
Result = -109

这是 php.ini 中的等效代码。

PHP
$test = chr(0);
$test = 16;
$test+= chr(131);
echo (int)$test;
Result = 16

我猜这可能与 unicode 编码给我错误的结果有关。结果应该是 -109,因为我的 C++ 程序可以正常工作,但我在 php.ini 中没有得到相同的结果。

当我在 C++ 中 cout (int)(char)131 我得到 -125,但如果我在 php 中回显 chr(131) 我得到 0;

有没有办法让我的 php 输出和我的 C++ 一样?

标签: phpc++

解决方案


您可以通过以下方式实现:

<?php
    $test = 16;
    $test = ($test + 131) % 256;
    if ($test > 127) {
        $test -= 256;
    }
    echo $test;
?>

加法

$test+= chr(131);

不符合您的预期。PHP 尝试将字符串/字符chr(131)转换为数字。它无法转换它,因为字符串不包含任何数字,因此该语句等效于

$test+= 0;

推荐阅读