c#:将String转换为Sbyte*

本文关键字:Sbyte 转换 String | 更新日期: 2023-09-27 17:50:17

我的c#代码使用了托管c++包装器。要创建这个Wrapper类型的新对象,我需要将String's转换为Sbyte 's。一些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*的任何副作用,我认为这是不安全的代码。

谢谢,凯文

c#:将String转换为Sbyte*

嗯,这样怎么样:

(没有测试它,如果它不工作,不要给我-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
    }               
}

你可以这样做:

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

sbyte[]和sbyte*几乎是一样的

sbyte [] str1;sbyte * str2;

&str1[0]是指向字符数组第一个元素的指针Str2是一个指向char的指针,它后面可能有一串连续的字符,后面跟着一个空结束符

如果您使用str1作为数组,则您知道没有空终止符的长度。但是,如果你想将str1传递给需要sbyte*的字符串API,你可以使用&str1[0]将其转换为sbyte*,然后剥离数组长度信息,因此你必须确保null终止。

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

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