c# -在字符串中获取整型字节数组
本文关键字:整型 字节 字节数 数组 获取 字符串 | 更新日期: 2023-09-27 18:08:41
我有一个随机整数值,我需要在字符串中表示为字节数组。例如:
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);
}
根本不要采用这种方法。您应该写入某种描述的二进制流-并写入二进制数据的数据包/消息的长度,然后是消息本身。例如:
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);
不需要把二进制数据当作文本。
好吧。首先,你应该从整数中得到字节数。你可以使用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") -它是简单的将字节转换为字符。使用:
var s = bytes.Aggregate(string.Empty, (current, t) => current + Convert.ToChar(t));
这应该会有帮助。
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
int number = rand.Next(1, 1000);
byte[] intBytes = BitConverter.GetBytes(number);
string answer = "";
for (int i = 0; i < intBytes.Length; i++)
{
answer += intBytes[i] + @"'";
}
Console.WriteLine(answer);
Console.WriteLine(number);
Console.ReadKey();
}
}
显然,您应该实现两个步骤来实现目标:
-
使用位算术从整数中以适当的顺序(小端或大端,由您决定)提取字节。
-
使用您需要的格式将提取的字节合并成字符串
可能的实现:
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字节后,转换为char。然后使用Char.IsControl()来识别非打印字符。直接使用可打印字符,并使用查找表为每个不可打印字符查找相应的转义序列。