【问题标题】:Convert string[] to byte[] and back to string[] and display it将 string[] 转换为 byte[] 并转换回 string[] 并显示它
【发布时间】:2015-06-08 23:14:20
【问题描述】:
string[] s1 = { "5", "168", "789", "28", "29", "155" };
string s2[] = {"abc","bcs"};

private byte[] byteBuffer;

public ClientState(Socket clntSock)
{
    this.clntSock = clntSock;
    rcvBuffer = new byte[BUFSIZE]; // Receive buffer

    byteBuffer = new byte[strings.Length];

    for (int i = 0; i < s1.Length; i++)
    {
       byteBuffer[i] = Byte.Parse(strings[i]);
    }

}

string[] strings = { "5", "168", "23", "28", "29", "155" };

private const int BUFSIZE = 32; // Size of receive buffer
private byte[] rcvBuffer;
private Socket clntSock;
private byte[][] byteBuffer;
private NetworkStream netStream;

public ClientState(Socket clntSock)
{
    this.clntSock = clntSock;
    rcvBuffer = new byte[BUFSIZE]; // Receive buffer

    byteBuffer = new byte[strings.Length][];
    byteBuffer = ToBytes(strings);

}
static byte[][] ToBytes(string[] ascii)
{
    byte[][] results = ascii.AsEnumerable().Select(x => Encoding.UTF8.GetBytes(x)).ToArray();
    return results;
}
public ClientState(NetworkStream netStream, byte[][] byteBuffer)
{
    this.netStream = netStream;
    this.byteBuffer = byteBuffer;

}
public NetworkStream NetStream
{
    get
    {
        return netStream;
    }
}

public byte[][] BByteBuffer
{
    set
    {
        byteBuffer = value;
    }
    get
    {
        return byteBuffer;
    }
}  

string[] strings = { "5", "168", "23", "28", "29", "155" };

private const int BUFSIZE = 32; // Size of receive buffer
private byte[] rcvBuffer;
private Socket clntSock;
private byte[][] byteBuffer;
private NetworkStream netStream;

public ClientState(Socket clntSock)
{
    this.clntSock = clntSock;
    rcvBuffer = new byte[BUFSIZE]; // Receive buffer

    byteBuffer = new byte[strings.Length][];
    byteBuffer = ToBytes(strings);
}

static byte[][] ToBytes(string[] ascii)
{
    byte[][] results = ascii.AsEnumerable().Select(x => Encoding.UTF8.GetBytes(x)).ToArray();
    return results;
}

public ClientState(NetworkStream netStream, byte[][] byteBuffer)
{
    this.netStream = netStream;
    this.byteBuffer = byteBuffer;
}
public NetworkStream NetStream
{
    get
    {
        return netStream;
    }
}

public byte[][] BByteBuffer
{
    set
    {
        byteBuffer = value;
    }
    get
    {
        return byteBuffer;
    }
}


public  void ReceiveCallback(IAsyncResult asyncResult)
{
    ClientState cs = (ClientState)asyncResult.AsyncState;

    try
    {
            int recvMsgSize = cs.ClntSock.EndReceive(asyncResult);

        if (recvMsgSize > 0)
        {

            Console.WriteLine("Thread {0} ({1}) - ReceiveCallback(): received {2} bytes",
                              Thread.CurrentThread.GetHashCode(),
                              Thread.CurrentThread.ThreadState,
                              recvMsgSize);

            cs.ClntSock.BeginSend(cs.BByteBuffer, 0, cs.BByteBuffer.Length, SocketFlags.None,
                                  new AsyncCallback(SendCallback), cs);
        }
        else
        {
            cs.ClntSock.Close();
        }
    }
    catch (SocketException se)
    {
        Console.WriteLine(se.ErrorCode + ": " + se.Message);
        cs.ClntSock.Close();
    }
}

我正在将 s1 字符串数组转换为字节数组并将其发送给客户端。这是一个服务器。所以在客户端我想将字节数组转换回字符串数组。 使用 Byte.Parse 我无法转换字符串 s2。那么如何将 s1 字符串数组和 s2 字符串数组转换为字节数组。

我想将字节数组转换回字符串数组并将结果输出到客户端。

它说在cs.ClntSock.BeginSend(cs.BByteBuffer, 0, cs.BByteBuffer.Length, SocketFlags.None,new AsyncCallback(SendCallback), cs);不能从字节[][]转换为字节[]

【问题讨论】:

标签: c#


【解决方案1】:

你想要什么字节取决于你的编码。但它会是这样的:

string myString = "hello";
byte[] bytes = Encoding.UTF8.GetBytes(myString);
string fromBytes = Encoding.UTF8.GetString(bytes);
Console.Write(myString == fromBytes);

【讨论】:

  • 它是一个字符串数组而不是单个字符串
  • 我想将字符串数组转换为字节数组。并将它们转换回字符串并显示它们
  • @vaibhav 您可以通过编辑您的问题添加任何其他解释,这样任何人都更容易理解。检查Converting a string to byte-array without using an encoding (byte-by-byte)
  • 它不仅仅是一个字符串到字节数组。它将字符串数组到字节数组 string[] 到 byte[]
  • @vaibhav,问题标题说 string[] 到 byte[] 再回到 string[],这是 Zer0 给你的。如果您有多个(例如,一个字符串数组),则必须多次执行此操作。您可以多次发布另一个关于如何做事的问题。
【解决方案2】:

试试这个

       static void Main(string[] args)
        {
            string[] s1 = { "5", "168", "789", "28", "29", "155" };
            byte[][] s1_byte = ToBytes(s1);
            string[] s1_out = ToString(s1_byte);
            DisplayBytes(s1_byte);
            string[] s2 = { "sdf", "dsfds", "233" };
            byte[][] s2_byte = ToBytes(s2);
            DisplayBytes(s2_byte);
            string[] s2_out = ToString(s2_byte);
        }
        static byte[][] ToBytes(string[] ascii)
        {
            byte[][] results = ascii.AsEnumerable().Select(x => Encoding.UTF8.GetBytes(x)).ToArray();
            return results;
        }
        static void DisplayBytes(byte[][] bytes)
        {
            for (int i = 0; i < bytes.LongLength; i++)
            {
                Console.WriteLine(string.Join(" ", new List<byte>(bytes[i]).Select(x => "0x" + x.ToString("x2")).ToArray()));
            }
        }
        static string[] ToString(byte[][] bytes)
        {
            List<string> results = new List<string>();
            for (int i = 0; i < bytes.LongLength; i++)
            {
                string newString = Encoding.UTF8.GetString(bytes[i]);
                results.Add(newString);
            }
            return results.ToArray();

        }

【讨论】:

  • @vaibhav - “我的代码中有更多问题”你能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2017-11-16
  • 2012-05-18
相关资源
最近更新 更多