【问题标题】:C#: Converting String to Sbyte*C#:将字符串转换为 Sbyte*
【发布时间】:2011-08-05 16:23:00
【问题描述】:

我的 C# 代码使用托管 C++ 包装器。要创建此 Wrapper 类型的新对象,我需要将 String 转换为 Sbyte*。 StackOverflow.com 的一些帖子讨论了如何将 String 转换为 byte[],以及将 byte[] 转换为 sbyte[],但没有将 String 转换为 sbyte*。

msdn.social.com 提供了有关如何将字节数组转换为字符串的建议:

>         // convert String to Sbyte*
>         string str = "The quick brown, fox jumped over the gentleman.";
>     
>         System.Text.ASCIIEncoding encoding = new
>         System.Text.ASCIIEncoding();
>
>         Byte[] bytes = encoding.GetBytes(str);

但是,“bytes”不是 sbyte* 类型。我以下将字节转换为 sbyte* 的尝试失败了:

1. Convert.ToSbyte(bytes);
2. cast:  (sbyte*) bytes;

请告诉我如何将 C# 字符串转换为 sbyte*。

另外,请谈谈引入 sbyte* 的任何副作用,我认为这是不安全的代码。

谢谢, 凯文

【问题讨论】:

    标签: c# unmanaged


    【解决方案1】:

    嗯,这样的事情怎么样:

    (没有测试,如果它不起作用,不要给我-1,我只是相信它应该):))

    string str = "The quick brown fox jumped over the gentleman.";
    byte[] bytes = Encoding.ASCII.GetBytes(str);
    
    
    unsafe 
    {
        fixed (byte* p = bytes)
        {
            sbyte* sp = (sbyte*)p;  
            //SP is now what you want
        }               
    }
    

    【讨论】:

    • 谢谢,Cipi。我去试试这个。
    【解决方案2】:

    你可以这样做:

    sbyte[] sbytes = Array.ConvertAll(bytes, q => Convert.ToSByte(q));
    

    【讨论】:

    • 转换为 sbytes[] 后,如何从 sbytes[] 转换为 sbyte*?简单的演员表不起作用。泰
    • @KevinMeredith 数组中的第一项是 sbyte* -> sbyte* b = &sbytes[0]
    【解决方案3】:

    sbyte[] 和 sbyte* 几乎是一回事(几乎)

    sbyte[] str1; sbyte* str2;

    &str1[0] 是指向字符数组第一个元素的指针 str2 是一个指向 char 的指针,它后面大概有一堆连续的 char,后面跟着一个空终止符

    如果你使用 str1 作为一个数组,你知道没有空终止符的长度。但是如果你想将 str1 传递给一个需要 sbyte* 的字符串 api,你可以使用 &str1[0] 将它变成一个 sbyte*,然后你剥离了数组长度信息,所以你必须确保你是空终止的.

    Cipi 的回答向您展示了如何将数组转换为指针,C# 故意使指针难以使用。在 C 或 C++ 中,数组和指针类似。

    http://www.lysator.liu.se/c/c-faq/c-2.html
    http://pw1.netcom.com/~tjensen/ptr/pointers.htm

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2018-10-28
      • 1970-01-01
      • 2018-09-10
      • 2015-03-09
      • 2014-06-25
      • 2023-01-24
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多