c# - 将 C# 代码转换为 C++ : Hex to Binary

标签 c# c++ visual-studio-2010 visual-c++


大家好,

我有一些 C# 代码,想将其转换为 C++。我一直在尝试和谷歌搜索几种不同的方式,但是是否有一些简单的修复这个代码片段以使其与 C++ 兼容?我是C++新手:

static std::string Hex2Bin(std::string sHexavalue)
    {

        std::string binaryValue = "";
        char charArray[] = sHexavalue::toupper.ToCharArray();

        for( int n=0; n < sHexavalue.length(); n++)
        {
            switch (charArray[n])
            {

                        case '0':
                            binaryValue += "0000";break;
                        case '1':
                            binaryValue += "0001";break;
                        case '2':
                            binaryValue += "0010";break;
                        case '3':
                            binaryValue += "0011";break;
                        case '4':
                            binaryValue += "0100";break;
                        case '5':
                            binaryValue += "0101";break;
                        case '6':
                            binaryValue += "0110";break;
                        case '7':
                            binaryValue += "0111";break;
                        case '8':
                            binaryValue += "1000";break;
                        case '9':
                            binaryValue += "1001";break;
                        case 'A':
                            binaryValue += "1010";break;
                        case 'B':
                            binaryValue += "1011";break;
                        case 'C':
                            binaryValue += "1100";break;
                        case 'D':
                            binaryValue += "1101";break;
                        case 'E':
                            binaryValue += "1110";break;
                        case 'F':
                            binaryValue += "1111";break;

            }

        }


        return binaryValue;



    }

当我将 sHexavalue 更改为大写和 ToCharArray 时,我的错误发生了。我收到此错误:IntelliSense:聚合对象应使用“{...}”初始化

所以我知道从 C# 到 C++ 的“转换”仍然很多,但我只需要知道是否有可能以快速简单的方式转换代码段。

编辑:这是原始来源:

//convert a Hexa value string to a binary value string
public static string Hex2Bin(string sHexavalue)
    {
        string binaryValue = "";
        char[] charArray = sHexavalue.ToUpper().ToCharArray();  

            for( int n=0; n < sHexavalue.Length; n++)
            {
                switch (charArray[n])
                {
                    case '0':
                        binaryValue += "0000";break;
                    case '1':
                        binaryValue += "0001";break;
                    case '2':
                        binaryValue += "0010";break;
                    case '3':
                        binaryValue += "0011";break;
                    case '4':
                        binaryValue += "0100";break;
                    case '5':
                        binaryValue += "0101";break;
                    case '6':
                        binaryValue += "0110";break;
                    case '7':
                        binaryValue += "0111";break;
                    case '8':
                        binaryValue += "1000";break;
                    case '9':
                        binaryValue += "1001";break;
                    case 'A':
                        binaryValue += "1010";break;
                    case 'B':
                        binaryValue += "1011";break;
                    case 'C':
                        binaryValue += "1100";break;
                    case 'D':
                        binaryValue += "1101";break;
                    case 'E':
                        binaryValue += "1110";break;
                    case 'F':
                        binaryValue += "1111";break;

                }

            }
        return binaryValue;
    }

最佳答案

考虑一些建议:

  1. sHexValue是一个只读输入参数,通过常量引用传递( const & ):

    std::string Hex2Bin(const std::string & sHexValue)
    

    (这比按值传递 std::string 更有效。)

  2. 无需执行 ToCharArray() C++ 中的 C# 转换。
    您可以访问单个 char s 在 std::string使用 operator[] .

  3. 您可以管理 A-F 的大小写使用多个 case失败:

    case 'A': case 'a': .... break; // valid for both 'A' and 'a'
    

这里有一个可能用 C++ 重写:

// Convert a hex value string to a binary value string.
std::string Hex2Bin(const std::string & sHexValue)
{
    std::string binaryValue;   // automatically initialized to empty string

    for (int n = 0; n < sHexValue.size(); ++n)
    {
        switch (sHexValue[n])
        {
            case '0':
                binaryValue += "0000"; break;
            case '1':
                binaryValue += "0001"; break;
            case '2':
                binaryValue += "0010"; break;
            case '3':
                binaryValue += "0011"; break;
            case '4':
                binaryValue += "0100"; break;
            case '5':
                binaryValue += "0101"; break;
            case '6':
                binaryValue += "0110"; break;
            case '7':
                binaryValue += "0111"; break;
            case '8':
                binaryValue += "1000"; break;
            case '9':
                binaryValue += "1001"; break;
            case 'A': case 'a':
                binaryValue += "1010"; break;
            case 'B': case 'b':
                binaryValue += "1011"; break;
            case 'C': case 'c':
                binaryValue += "1100"; break;
            case 'D': case 'd':
                binaryValue += "1101"; break;
            case 'E': case 'e':
                binaryValue += "1110"; break;
            case 'F': case 'f':
                binaryValue += "1111"; break;
        }
    }

    return binaryValue;
}

关于c# - 将 C# 代码转换为 C++ : Hex to Binary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930079/

相关文章:

c# - 将字符串转换为整数

c# - Linq 和二进制搜索 - 改进这个缓慢的 Where 语句?

c# - MonoTouch--动态变化表格末尾添加按钮

visual-studio - Visual Studio 2010 不允许我调试 Web 应用程序

c# - 如何防止在加载表单时检查 RadioButton?

c# - 如何让 LookAt 对齐 transform.up 向量而不是 transform.forward?

C++ json-nlohmann 访问列表元素

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 删除 OpenGL 中的嵌套显示列表

c# - 你如何找到一个单词位于文本框中的哪一行?