[英]C# get string/characters value from c++ function which return char pointer
[英]C# get return list string from function
我在從函數返回列表時遇到問題,我嘗試給出一個變量以從函數獲取返回列表,我得到如下返回:
System.Collections.Generic.List`1 [System.String]
下面是我做的代碼:
我想獲取返回列表,字符串將從函數中拆分為長度64,它將在列表中具有兩個字符串,該字符串將被擴展,下面的代碼只是我設置的示例字符串。
主功能:
static void Main(string[] args)
{
string test="DD1234455667788999663234324324345434543542252E323431431414313414DD1234455667788999663234324324345434543542252E323431431414313414";
var test = toHexString(datass);
}
返回函數:
public static string toHexString(byte[] hexArray)
{
string hexString = "";
List<string> hexlist = new List<string>();
foreach (byte b in hexArray)
{
hexString += string.Format("{0:X2}", b);
if (hexString.Length > 0 && (hexString.Length % 64) == 0)
{
hexlist.Add(hexString);
hexString = string.Empty;
}
}
return hexlist.ToString();
}
更改方法以列出將解決退貨問題
static void Main(string[] args)
{
string test="DD1234455667788999663234324324345434543542252E323431431414313414DD1234455667788999663234324324345434543542252E323431431414313414";
var test = toHexString(datass);
}
public static List<string> toHexString(byte[] hexArray)
{
string hexString = "";
List<string> hexlist = new List<string>();
foreach (byte b in hexArray)
{
hexString += string.Format("{0:X2}", b);
if (hexString.Length > 0 && (hexString.Length % 64) == 0)
{
hexlist.Add(hexString);
hexString = string.Empty;
}
}
return hexlist.ToString();
}
首先,在if循環中,您已經訪問了test.Add(hexString);
根據此代碼無法訪問,我相信您正在嘗試的是hexlist.Add(hexString);
其次, hexlist.ToString()
將始終返回System.Collections.Generic.List1[System.String]
因為ToString無法將列表直接轉換為字符串,並且會返回對象的類型。
您可以使用foreach
或stringBuilder
或string.Join()
問題是,當您在沒有明確重寫ToString()
的對象或類上調用ToString()
,它將返回其類型名稱`。
return hexlist.ToString();
由於hexlist
是List<T>
您得到的明顯結果是
System.Collections.Generic.List`1[System.String]
您可以使用類似string.Concat
,或string.Join
來回報您想要的結果。 例如
return string.Concat(hexlist);
// or
return string.Join("",hexlist);
或者,如果您希望使用惰性樣式的Linq Enumerable解決方案。 您可以使用這樣的擴展方法來為數組返回可枚舉的塊
// returns enumerable chunks of size, and ignores any partial result
public static IEnumerable<IEnumerable<T>> GetChunks<T>(this T[] source, int size)
{
for (var i = 0; i < source.Length; i += size)
yield return source.Skip(i).Take(size);
}
然后你可以寫這樣的方法
public static string GetHex(byte[] bytes, int size)
=> string.Concat(bytes.GetChunks(size).Select(x => $"{x:X2}"));
用法
string test = GetHex(datass,32);
此方法的結果返回一個十六進制字符串,由32個字節的塊組成
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.