簡體   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