c# - string转byte - string to byte python




在C#中将字符串转换为字节数组 (6)

我对C#很陌生。 我正在从VB转换成C#。 这个语句的语法有问题:

if ((searchResult.Properties["user"].Count > 0))
{
    profile.User = System.Text.Encoding.UTF8.GetString(searchResult.Properties["user"][0]);
}

然后我看到以下错误:

参数1:不能从'object'转换为'byte []'

'System.Text.Encoding.GetString(byte [])'的最佳重载方法匹配有一些无效参数

我试图修复基于this文章的代码,但仍然没有成功

string User = Encoding.UTF8.GetString("user", 0);

有什么建议么?


只有字符是1个字节时,以下方法才有效。 (由于它是2个字节,默认的unicode将不起作用)

public static byte[] ToByteArray(string value)
{            
    char[] charArr = value.ToCharArray();
    byte[] bytes = new byte[charArr.Length];
    for (int i = 0; i < charArr.Length; i++)
    {
        byte current = Convert.ToByte(charArr[i]);
        bytes[i] = current;
    }

    return bytes;
}

保持简单


如果您已经有了一个字节数组,那么您将需要知道使用哪种类型的编码将其编入该字节数组中。

例如,如果字节数组是这样创建的:

byte[] bytes = Encoding.ASCII.GetBytes(someString);

您需要将其重新转换为如下所示的字符串:

string someString = Encoding.ASCII.GetString(bytes);

如果您可以在您继承的代码中找到用于创建字节数组的编码,那么您应该设置它。


改进JustinStolle的编辑(Eran Yogev使用BlockCopy)。

所提出的解决方案确实比使用编码更快。 问题在于,它不适用于编码长度不均匀的字节数组。 正如所给出的那样,它引发了一个不受约束的例外。 从字符串解码时,将长度增加1会留下尾随字节。

对我而言,当我想从DataTable编码为JSON时,需求就来了。 我正在寻找一种将二进制字段编码为字符串并从字符串解码回byte[]

因此我创建了两个类 - 一个包装上述解决方案(当从字符串编码时很好,因为长度总是偶数),另一个处理byte[]编码。

我通过添加单个字符来解决不均匀长度问题,该字符告诉我二进制数组的原始长度是奇数('1')还是偶数('0')

如下:

public static class StringEncoder
{
    static byte[] EncodeToBytes(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }
    static string DecodeToString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }
}

public static class BytesEncoder
{
    public static string EncodeToString(byte[] bytes)
    {
        bool even = (bytes.Length % 2 == 0);
        char[] chars = new char[1 + bytes.Length / sizeof(char) + (even ? 0 : 1)];
        chars[0] = (even ? '0' : '1');
        System.Buffer.BlockCopy(bytes, 0, chars, 2, bytes.Length);

        return new string(chars);
    }
    public static byte[] DecodeToBytes(string str)
    {
        bool even = str[0] == '0';
        byte[] bytes = new byte[(str.Length - 1) * sizeof(char) + (even ? 0 : -1)];
        char[] chars = str.ToCharArray();
        System.Buffer.BlockCopy(chars, 2, bytes, 0, bytes.Length);

        return bytes;
    }
}

有没有人看到有什么理由不这样做?

mystring.Select(Convert.ToByte).ToArray()

首先,添加System.Text命名空间

using System.Text;

然后使用这个代码

string input = "some text"; 
byte[] array = Encoding.ASCII.GetBytes(input);

希望解决它!


static byte[] GetBytes(string str)
{
     byte[] bytes = new byte[str.Length * sizeof(char)];
     System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
     return bytes;
}

static string GetString(byte[] bytes)
{
     char[] chars = new char[bytes.Length / sizeof(char)];
     System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
     return new string(chars);
}






byte