gpt4 book ai didi

C# 将包含 c 样式字符串的 byte[] 转换为字符串 - NOT Encoding.GetString(byte[])

转载 作者:太空狗 更新时间:2023-10-29 22:08:34 24 4
gpt4 key购买 nike

愚蠢的我试图将从不受我控制的外部源接收的字节数组转换为字符串。 (是的,我知道 Encoding.GetString(byte[])

我目前拥有的:

void myfunc()
{
byte[] rawData = new byte[ 128 ];

for( int i = 0; i < rawData.Length; ++i )
{
rawData[ i ] = 0;
}

rawData[ 0 ] = (byte)'H';
rawData[ 1 ] = (byte)'e';
rawData[ 2 ] = (byte)'l';
rawData[ 3 ] = (byte)'l';
rawData[ 4 ] = (byte)'o';


string asString = Encoding.UTF8.GetString( rawData, 0, rawData.Length );

string asRealString = Encoding.UTF8.GetString( rawData );
}

两个字符串都包含 Hello 部分,但之后还有很多\0 - 这不是我所期望的。调试器的输出:asRealString =

"Hello\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

有什么方法可以给我一个像“Hello”这样的字符串吗?

我做了 goolge,但我得到的只是 Encoding.GetString(byte[]) ...

编辑:字节数组的创建超出了我的范围!我确实把它作为一个更大的 C 风格结构的一部分。并且字符串没有前导长度。我也希望有一些内置的方法来做它,我不必找到第一个\o 和 tehn convert 知道长度....

编辑这是我最后使用的:

private static string convertCString( byte[] buffer, int maxLength, Encoding targetEncoding )
{
int length = 0;
int realMax = buffer.Length < maxLength ? buffer.Length : maxLength;

for(
; 0 != buffer[length] && length < realMax
; ++length )
{}

return targetEncoding.GetString( buffer, 0, length );
}

最佳答案

只找到第一个0:

    int len = Array.IndexOf(rawData, (byte)0); // maybe some bounds check too
string asString = Encoding.UTF8.GetString(rawData, 0, len);

关于C# 将包含 c 样式字符串的 byte[] 转换为字符串 - NOT Encoding.GetString(byte[]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5964718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com