将C(\ 0已终止)字符串转换为PHP字符串

win*_*aed 4 php c string substr strstr

PHP是我定期使用的那种语言之一,但是当我再次开始使用它时,通常不得不关闭蜘蛛网.本周同样适用于我将一些C代码移植到PHP.这使用了大量的AES加密和SHA256散列 - 到目前为止一切正常.但是,解密的字符串以"C"形式出现 - 即以零字节后跟"垃圾"填充字节终止.

我目前使用以下内容将这些C风格的字符串"修剪"为PHP表单:

$iv = strpos( $hashsalt8, "\0");
if ($iv)
   $hashsalt8 = substr( $hashsalt8, 0, $iv );
Run Code Online (Sandbox Code Playgroud)

似乎啰嗦而且应该有一个单行函数调用,但我找不到它?

注意:虽然在这种情况下"哈希盐"名称意味着我可能知道原始字符串的长度,但在一般情况下这是未知的.显然,substr()当先验已知长度时,可以使用单线解决方案.

You*_*You 9

用途strstr:

$hashsalt8 = strstr($hashsalt8, "\0", TRUE);
Run Code Online (Sandbox Code Playgroud)

为小于5.3.0版本的丑陋溶液(其中,第三个参数是不可用)使用strrev,substrstrrchr功能来代替:

$hashsalt8 = strrev(substr(strrchr(strrev($hashsalt8), "\0"), 1));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,第三个参数仅适用于PHP 5.3+. (3认同)