繁体   English   中英

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

[英]C#: Converting String to Sbyte*

我的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 *的任何副作用,我认为这是不安全的代码。

谢谢,凯文

嗯,这样的事情怎么样:

(没有测试它,不给我-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作为数组,你知道没有null终止符的长度。 但是如果你想将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM