愚蠢的我试图将从外部源接收的字节数组转换为字符串.(是的,我确实知道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 );
}
Run Code Online (Sandbox Code Playgroud)
两个字符串都包含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"
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让我像"Hello"这样的字符串吗?
我做了goolge,但我得到的只是Encoding.GetString(byte[])......
编辑:字节数组的创建者超出了我的范围!我确实把它作为更大的C-Style结构的一部分.并且没有字符串的前导长度.此外,我希望有一个ome内置的方式来tdo它,我没有必要找到第一个\ o和tehn转换知道长度....
编辑 这是我最后使用的:
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 );
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 13
找到第一个0:
int len = Array.IndexOf(rawData, (byte)0); // maybe some bounds check too
string asString = Encoding.UTF8.GetString(rawData, 0, len);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |