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);
}

c# -在字符串中获取整型字节数组

根本不要采用这种方法。您应该写入某种描述的二进制流-并写入二进制数据的数据包/消息的长度,然后是消息本身。例如:

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();
        }
    }

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

  1. 使用位算术从整数中以适当的顺序(小端或大端,由您决定)提取字节。

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

可能的实现:

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()来识别非打印字符。直接使用可打印字符,并使用查找表为每个不可打印字符查找相应的转义序列。