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

Kev*_*ith 12 c# unmanaged

我的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);
Run Code Online (Sandbox Code Playgroud)

但是,"bytes"不是sbyte*类型.我以下尝试将字节转换为sbyte*失败:

1. Convert.ToSbyte(bytes);
2. cast:  (sbyte*) bytes;
Run Code Online (Sandbox Code Playgroud)

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

另外,请谈谈介绍sbyte*的任何副作用,我认为这是不安全的代码.

谢谢,凯文

Cip*_*ipi 17

嗯,这样的事情怎么样:

(没有测试它,不给我-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
    }               
}
Run Code Online (Sandbox Code Playgroud)


Fel*_*ano 6

你可以这样做:

sbyte[] sbytes = Array.ConvertAll(bytes, q => Convert.ToSByte(q));
Run Code Online (Sandbox Code Playgroud)