C#:将字符串转换为Sbyte *

| 我的C#代码使用Managed 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 *的任何副作用,我认为这是不安全的代码。 谢谢, 凯文     
已邀请:
嗯,这样的事情怎么样: (请进行测试,如果它不起作用,请不要给我-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; 字节* str2; &str1 [0]是指向字符数组第一个元素的指针 str2是指向char的指针,该char后面可能有一堆连续的char,后跟一个空终止符 如果将str1用作数组,则知道没有空终止符的长度。但是如果要将str1传递给需要sbyte *的字符串api,请使用&str1 [0]将其转换为sbyte *,然后剥离数组长度信息,因此必须使sur eyou \ n为空终止。 Cipi的答案向您展示了如何将数组转换为指针,C#使得故意使用指针变得困难。在C或C ++中,数组和指针相似。 http://www.lysator.liu.se/c/c-faq/c-2.html http://pw1.netcom.com/~tjensen/ptr/pointers.htm     

要回复问题请先登录注册