【问题标题】:C to PHP unsigned char issueC到PHP unsigned char问题
【发布时间】:2016-04-04 02:21:57
【问题描述】:

我终其一生都无法弄清楚如何用 PHP 编写这一行代码。我以前从未在 PHP 中遇到过这样的事情,希望能得到任何帮助。

$OCTET_data->B[0] = (unsigned char) (ror8 ((unsigned char) (ror8 ($OCTET_data->B[0], 1) - 1), 1) - 1) ^ $OCTET_data->B[4];

【问题讨论】:

  • 那应该是什么语言?它的一部分看起来像 C,部分看起来像 PHP。 ror8 是什么?
  • 那行代码试图做什么?
  • 这是转换为 PHP 的 C 代码,但我不确定如何处理 unsigned char。我知道我应该使用 pack 函数,但我不确定在这个特定示例中,就实现而言,最佳路线是什么。
  • 它是 RSA 安全加密功能的一部分。
  • 解释你想要完成什么。显示输入数据和所需的输出数据。另外,请展示原始 C 代码,以便我们了解它要做什么。

标签: php c char unsigned


【解决方案1】:

我一辈子都搞不懂你想做什么。

但我认为您正在寻找“打包”功能。
http://php.net/manual/en/function.pack.php

   $unsignedchar =  pack("C",$char);  // convert a char character to an unsigned char byte

【讨论】:

  • 我发现了,但不确定如何在这个特定示例中实现。例如,我应该将 $char 设置为什么,我应该简单地将 (unsigned char) 替换为 ($unsignedchar)?
【解决方案2】:

原始 C 代码中的(unsigned char) 会丢弃操作数中不适合unsigned char 的所有位。代码显然假定unsigned char 有8 位,因此强制转换相当于28-1 的按位与,你可以这样写

$OCTET_data->B[0] = (ror8((ror8($OCTET_data->B[0], 1)-1)&255, 1)-1)&255^$OCTET_data->B[4];

或者,也许更清楚一点

$OCTET_data->B[0] = ror8(ror8($OCTET_data->B[0], 1
                             )-1 & 255, 1
                        )-1 & 255 ^ $OCTET_data->B[4];

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多