通过套接字接收原始十六进制并转换为字符串
问题描述:
我有以下问题,我尝试从TCP/IP套接字接收原始十六进制值并将它们写入一个txt文件,只有我有一些问题转换此原始十六进制数据转换为UTF-8字符串。我使用下面的方法:通过套接字接收原始十六进制并转换为字符串
TcpClient client = new TcpClient("192.168.200.91", 2101);
NetworkStream netStream = client.GetStream();
byte[] bytes = new byte[client.ReceiveBufferSize];
netStream.Read(bytes, 0, (int)client.ReceiveBufferSize);
string returndata = Encoding.UTF8.GetString(bytes);
using (var writer = new StreamWriter(@"C:\Users\ -\Documents\test.txt", false, Encoding.UTF8))
{
writer.WriteLine(returndata);
}
这将返回:*þý% ˆ ꇅ ÿ Œ7ºe B %û
如何成功地读取原始数据HEX并转换成可读的字符串呢?
答
使用BitConverter:
TcpClient client = new TcpClient("192.168.200.91", 2101);
NetworkStream netStream = client.GetStream();
byte[] bytes = new byte[client.ReceiveBufferSize];
int bytesRead = netStream.Read(bytes, 0, (int)client.ReceiveBufferSize);
string returndata = BitConverter.ToString(bytes, 0, bytesRead).Replace("-", "")
using (var writer = new StreamWriter(@"C:\Users\ -\Documents\test.txt", false, Encoding.UTF8))
{
writer.WriteLine(returndata);
}
主要感谢,你有什么想法从何而来所有的0? –
是的,你正在读取缓冲区大小。我会更新我的答案。一会儿。 – john
@ErwinVorenhout这应该修复它,以便它只使用从流中读取的字节。 – john