php - C++ HexToBin VS PHP Hex2Bin 函数。输出不同

标签 php c++ hex bin

我的 PHP 和 C++ 脚本中都有以下字符串:

152F302436152F302435152F302434152F302433152F302433

在 PHP 中,我将内置的 hex2bin 函数用作:

<?php
    $HEXString = "152F302436152F302435152F302434152F302433152F302433";
    echo hex2bin($HEXString);
    //Outputs: /0$6/0$5/0$4/0$3/0$3 
    ?>

但是,在 C++ 中,我使用以下函数来完成相同的操作并得到完全不同的结果:

const char* HexCharToBin(char c) {
    char cUpper = toupper(c);
    if (cUpper == '0') return "0000";
    else if (cUpper == '1') return "0001";
    else if (cUpper == '2') return "0010";
    else if (cUpper == '3') return "0011";
    else if (cUpper == '4') return "0100";
    else if (cUpper == '5') return "0101";
    else if (cUpper == '6') return "0110";
    else if (cUpper == '7') return "0111";
    else if (cUpper == '8') return "1000";
    else if (cUpper == '9') return "1001";
    else if (cUpper == 'A') return "1010";
    else if (cUpper == 'B') return "1011";
    else if (cUpper == 'C') return "1100";
    else if (cUpper == 'D') return "1101";
    else if (cUpper == 'E') return "1110";
    else if (cUpper == 'F') return "1111";
    else return "0000";
    }
string HexToBin(const string& hex) {
    string bin;
    for (unsigned i = 0; i != hex.length(); ++i) {
        bin += HexCharToBin(hex[i]);
        }
    return bin;
    }

C++代码:

cout << HexToBin("152F302436152F302435152F302434152F302433152F302433") << endl;
//Outputs: 00010101001011110011000000100100001101100001010100101111001100000010010000110101000101010010111100110000001001000011010000010101001011110011000000100100001100110001010100101111001100000010010000110011

我希望 C++ 实现与 PHP 返回相同的字符串。我在这里做错了什么?

最佳答案

如果您只想将十六进制数转换为二进制数,请使用 base_convert() .

阅读hex2bin php documentation仔细地引用:

Caution This function does NOT convert a hexadecimal number to a binary number. This can be done using the base_convert() function.

这个功能简直了

Decodes a hexadecimally encoded binary string.

因此,由于您的字符串不是十六进制编码的字符串,您会得到意想不到的/不同的输出。

要复制 php 的 hex2bin 的行为,以下帖子可以帮助您:Missing punctuation from C++ hex2bin

希望对您有所帮助。

关于php - C++ HexToBin VS PHP Hex2Bin 函数。输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073286/

相关文章:

c# - 在 C# 中获取范围之间的十六进制值

javascript - 如何在给定计数器的情况下在 "rainbow order"中生成一系列十六进制代码?

php - 如果数字不是 6 的倍数,则在 PHP 中查找余数

php - 如何用破折号替换codeigniter url中的下划线?

php - 如何使用 PHP 在 Google Play Developer API 中进行授权

c++ - 用于检查成员是否存在的模板特化

C++ - Windows IoT Core 远程调试器 - 调试器无法启动

c++ - 在函数中通过引用调用

Swift 3 在文本颜色中使用十六进制

php - ElasticSearch 6.2-aggs返回:unknown_named_object_exception