【问题标题】:c++ wchar array to c#c++ wchar数组到c#
【发布时间】:2013-02-02 19:20:36
【问题描述】:

我不了解 C++,我必须将一些代码转换为 C#。我已经设法做了一些,但我不太明白如何转换几行,所以我在这里寻求帮助。

这是 C++ 代码:

            WCHAR wsSerial[MAX_PATH]={'\0'};
            WCHAR wsS2[MAX_PATH]={'\0'};

            wcscpy_s(wsSerial, MAX_PATH, m_strSerial);
            wcscpy_s(wsS2,MAX_PATH,wsSerial+8);
            wsS2[8]=NULL;
            ULONG ulCode2 = wcstoul(wsS2, NULL,10);

这就是我在 C# 中所拥有的:

        string wsSerial;
        string wsS2;

        wsSerial = mSerial; //an external input
        wsS2 = wsSerial + 8;
        wsS2= wsSerial.Substring(0, 8);
        long ulCode2 = long.Parse(wsS2);

所以我有两个问题:

  1. wsSerial 是 C++ 中的一个数组,但我在 C# 中不需要这个数组,对吗?我的意思是,它所做的只是存储一个大数字,然后将其转换为数值,对吧?
  2. 这究竟是做什么的? wcscpy_s(wsS2,MAX_PATH,wsSerial+8)。 + 8 让我失望。

【问题讨论】:

    标签: c# c++ language-comparisons


    【解决方案1】:

    在 C 中,字符串只是一个包含字符“字符串”的连续区域,以特殊字符终止。换句话说,char 的数组。 (或wchar_t 用于宽字符串。)

    在 C#(和 C++)中,这不是必需的,因为它有自己特殊的 string 类型,可以在后台处理数组内容。


    关于+8 的东西,它只是在复制时跳过wsSerial 的前八个字符。要理解这一点,您应该阅读“指针算法”。

    【讨论】:

      【解决方案2】:

      是这样的:

      string wsSerial = mSerial;
      string wsS2 = wsSerial.Substring(8, 8);
      long ulCode2 = long.Parse(wsS2);
      

      【讨论】:

        【解决方案3】:

        看起来你几乎已经到了那里,但是调用中的第一个参数

        wsSerial.Substring() 
        

        应该是 8,第二个应该是 MAX_PATH 减 8。

        【讨论】:

        • 实际上,在 C 代码中,OP 在 8 个字符之后终止,所以长度应该是 8。
        • 不,原来是在源指针上加8,所以开始copy 8个字符进去。
        • 是的,但是请看下一个源代码行。
        • 天哪。因此,我们正在帮助转录看似可疑的损坏代码!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 2010-12-10
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        相关资源
        最近更新 更多