gpt4 book ai didi

C# 替换 Byte[] 中的字节

转载 作者:太空狗 更新时间:2023-10-29 22:11:17 30 4
gpt4 key购买 nike

替换字节数组中的某些字节的最佳方法是什么?

例如,我有 bytesFromServer = listener.Receive(ref groupEP); 并且我可以执行 BitConverter.ToString(bytesFromServer) 将其转换为可读格式以返回类似的东西

48 65 6c 6c 6f 20 
74 68 65 72 65 20
68 65 6c 70 66 75
6c 20 70 65 6f 70
6c 65

我想将“68 65 6c”中的内容替换为“68 00 00”之类的内容(仅作为示例)。 byte[] 上没有 .Replace()。

是否有一种简单的方法可以将其转换回 byte[]?

感谢任何帮助。谢谢!

最佳答案

你可以对它进行编程......作为一个开始尝试......然而这还不是健壮的,不像代码那样生产......注意不对一的错误我没有完全测试这个......

    public int FindBytes(byte[] src, byte[] find)
{
int index = -1;
int matchIndex = 0;
// handle the complete source array
for(int i=0; i<src.Length; i++)
{
if(src[i] == find[matchIndex])
{
if (matchIndex==(find.Length-1))
{
index = i - matchIndex;
break;
}
matchIndex++;
}
else if (src[i] == find[0])
{
matchIndex = 1;
}
else
{
matchIndex = 0;
}

}
return index;
}

public byte[] ReplaceBytes(byte[] src, byte[] search, byte[] repl)
{
byte[] dst = null;
int index = FindBytes(src, search);
if (index>=0)
{
dst = new byte[src.Length - search.Length + repl.Length];
// before found array
Buffer.BlockCopy(src,0,dst,0, index);
// repl copy
Buffer.BlockCopy(repl,0,dst,index,repl.Length);
// rest of src array
Buffer.BlockCopy(
src,
index+search.Length ,
dst,
index+repl.Length,
src.Length-(index+search.Length));
}
return dst;
}

作为扩展方法实现

public void Replace(this byte[] src, byte[] search, byte[] repl)
{
ReplaceBytes(src, search, repl);
}

使用正常方法:

ReplaceBytes(bytesfromServer, 
new byte[] {0x75, 0x83 } ,
new byte[]{ 0x68, 0x65, 0x6c});

扩展方法使用:

bytesfromServer.Replace(
new byte[] {0x75, 0x83 },
new byte[]{ 0x68, 0x65, 0x6c});

关于C# 替换 Byte[] 中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5132890/

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