[英]C# - Get Integer Byte Array in String
我有一個隨機整數值,需要在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);
}
完全不要采用這種方法。 您應該寫一些描述性的二進制流-並按照包/消息的長度寫入二進制數據 ,然后寫入消息本身。 例如:
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);
完全不需要將二進制數據視為文本。
這應該對此有所幫助。
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();
}
}
好。 首先,您應該從整數獲取字節。 您可以使用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));
顯然,您應該實現兩個步驟以實現目標:
使用位算術以適當的順序(小端或大端,由您決定)從整數中提取字節。
使用所需的格式將提取的字節合並為字符串。
可能的實現:
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()識別非打印字符。 直接使用可打印字符,並使用查找表為每個不可打印字符找到相應的轉義序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.