![](/img/trans.png)
[英]C# - Converting String array to sbyte** (String[] to 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.