如何将大十六进制字符串转换为字节数组?

时间:2015-10-23 09:20:29

标签: c# hex bytearray file-handling

您好我需要使用文件处理,因为我使用了一种方法将十六进制字符串转换为字节数组。

public static byte[] StringToByteArray(string hex)
{
   return Enumerable.Range(0, hex.Length)
                    .Where(x => x % 2 == 0)
                    .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                    .ToArray();
}

我的问题是,当我给一个小的十六进制字符串作为此函数的参数时,它将产生正确的输出,但是当我使用大的十六进制字符串作为参数时,输出不是预期的。

明白你的理解 -

我使用了十六进制字符串,该字符串是从值为[26246026]的字节数组转换而来的, 当我将该十六进制字符串转换为字节数组时,它应返回一个字节值为[26246026] - 但它只返回部分字节,即[262144]。

我无法从十六进制字符串中获取确切的字节值,我怎么能得到它? 请有人帮助我获得预期的输出。

我的该方法的输入字符串包含这个十六进制字符串,它是一个25mb大小的文件 - 它应该返回[26246026]的字节值---但它只返回[262144]的字节值。

当我使用小十六进制字符串(最小尺寸文件)时它的工作正常,但是当我处理大文件时,我无法获得原始文件字节。请建议我做什么。

我的输入参数字符串内容如评论中所述。

它的长度总共为524288个字符..

看起来像这样。

3026b2758e66cf11a6d900aa0062ce6c301600000000000008000000010240a4d0d207e3d21197f000a0c95ea850cc0000000000000004001c00530066004f0072006900670069006e0061006c00460050005300000003000400b49204001c0057004d004600530044004b00560065007200730069006f006e00000000001e00310031002e0030002e0036003000300031002e00370030003000300000001a0057004d004600530044004b004e006500650064006500640000000000160030002e0030002e0030002e00300030003000300000000c0049007300560042005200000002000400000000003326b2758e66cf11a6 .............................................. .................................................. .......................................... d900aa0062ce6c54010000000000001e0000003a00da000000570dcb8b495848cea4609eca906bc24db442394f0ddac5eb0604fb99820bcc30ff0f1736eefd74cd4317a21a369e208c580dbb02f90e888f0a35901e08439ec6087c61d241bc3c476c24d311291a678596a98792a9000b68adf213906e0f00097c8d989e517ee532fcd6cb70e520ec9dd4fad8a1a37668bbd678bea11c1fcf2d187c4c4c6c09c3c2c53d3e64016cfebc34eace85d45a4c08cd78d05d3934e05b72ec194304848165a8c1a585c78423

1 个答案:

答案 0 :(得分:0)

EXPORTING_DLL