php - 为什么我的 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++ 一样?
解决方案
您可以通过以下方式实现:
<?php
$test = 16;
$test = ($test + 131) % 256;
if ($test > 127) {
$test -= 256;
}
echo $test;
?>
加法
$test+= chr(131);
不符合您的预期。PHP 尝试将字符串/字符chr(131)
转换为数字。它无法转换它,因为字符串不包含任何数字,因此该语句等效于
$test+= 0;
推荐阅读
- sql - 试图做一个 INSERT INTO 语句
- excel - 如何使用训练有素的深度学习模型在 excel 中进行预测?
- java - 出于安全目的,我可以为 SMS 加密做什么
- c++ - 当循环中的条件至少满足一次时,有没有办法运行语句?
- python - PyQt 更改 Widget 父级
- python - 为什么 tf.profiles 会为 flops 返回 none 值?
- c# - 如何在 C# 中检查我的互联网是否超时
- amazon-web-services - AWS 服务器上的 Visual Studio 创建/配置
- r - 知道一个包是在哪个(确切的)R 版本下构建的?
- elixir - 为什么 phoenix liveview 更新/分配消息使客户端 contenteditable 值恢复?