C# - 在String中获取整数字节数组

时间:2015-08-19 17:56:06

标签: c# arrays encoding character-encoding

我有一个随机整数值,我需要在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);
}

5 个答案:

答案 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)

显然,您应该实现两个步骤来实现目标:

  1. 使用位算术以适当的顺序从小整数中提取字节(little-endian或big-endian,由你决定)。

  2. 使用您需要的格式将提取的字节合并到字符串中。

  3. 可能的实施:

    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的相应转义序列。