我有一个随机整数值,我需要在String中表示为Byte数组。例如:
int value = 32;
String strValue = getStringByteArray(value);
Console.WriteLine(strValue); // should write: " \0\0\0"
如果value = 11
,则getStringByteArray(value)
请回复"\v\0\0\0"
。
如果value = 13
,则getStringByteArray(value)
请回复"\r\0\0\0"
。
等等。
如何在C#中实现方法getStringByteArray(int value)
?
更新
这是从C#NamedPipe服务器接收数据的代码:
bool CFilePipe::ReadString(int m_handle, string &value)
{
//--- check for data
if(WaitForRead(sizeof(int)))
{
ResetLastError();
int size=FileReadInteger(m_handle);
if(GetLastError()==0)
{
//--- check for data
if(WaitForRead(size))
{
value=FileReadString(m_handle,size);
return(size==StringLen(value));
}
}
}
//--- failure
return(false);
}
答案 0 :(得分:8)
根本不要采用这种方法。您应该写入某些描述的二进制流 - 并将二进制数据写入数据包/消息的长度,然后写入消息本身。例如:
BinaryWriter writer = new BinaryWriter(stream);
byte[] data = Encoding.UTF8.GetBytes(text);
writer.Write(data.Length);
writer.Write(data);
然后在另一端,你会使用:
BinaryReader reader = new BinaryReader(stream);
int length = reader.ReadInt32();
byte[] data = reader.ReadBytes(length);
string text = Encoding.UTF8.GetString(data);
根本不需要将二进制数据视为文本。
答案 1 :(得分:1)
这应该有助于此。
VIEW_NAME = 'My_Table'
答案 2 :(得分:1)
好。首先,你应该从整数中获取字节。您可以使用BitConverter:
执行此操作var bytes = BitConverter.GetBytes(value);
接下来,这是三个变种。首先 - 如果你想得到二进制格式的结果。只需占用所有字节并按原样写入:
var str = string.Concat(bytes.Select(b => Convert.ToString(b, 2)));
第二个变种。如果要将字节数组转换为十六进制字符串:
var hex = BitConverter.ToString(array).Replace("-","");
第三种变体。您的表示形式(“\ v \ 0 \ 0 \ 0”) - 将字节转换为char很简单。使用此:
var s = bytes.Aggregate(string.Empty, (current, t) => current + Convert.ToChar(t));
答案 3 :(得分:1)
显然,您应该实现两个步骤来实现目标:
使用位算术以适当的顺序从小整数中提取字节(little-endian或big-endian,由你决定)。
使用您需要的格式将提取的字节合并到字符串中。
可能的实施:
using System;
using System.Text;
public class Test
{
public static void Main()
{
Int32 value = 5152;
byte[] bytes = new byte[4];
for (int i = 0; i < 4; i++)
{
bytes[i] = (byte)((value >> i * 8) & 0xFF);
}
StringBuilder result = new StringBuilder();
for (int i = 0; i < 4; i++)
{
result.Append("\\" + bytes[i].ToString("X2"));
}
Console.WriteLine(result);
}
}
Ideone片段:http://ideone.com/wLloo1
答案 4 :(得分:1)
我想你是说要将每个字节转换为字符文字,使用转义序列作为不可打印的字符。
将整数转换为4个字节后,转换为char。然后使用Char.IsControl()来识别非打印字符。直接使用可打印的char,并使用查找表查找每个不可打印的char的相应转义序列。