Hex Dump using LINQ (in 7 lines of code)
- by Fabrice Marguerie
Eric White has posted an interesting LINQ query on his blog that shows how to create a Hex Dump in something like 7 lines of code.Of course, this is not production grade code, but it's another good example that demonstrates the expressiveness of LINQ.Here is the code:byte[] ba = File.ReadAllBytes("test.xml");int bytesPerLine =
16;string hexDump = ba.Select((c, i) => new { Char = c, Chunk = i / bytesPerLine })
.GroupBy(c => c.Chunk) .Select(g
=> g.Select(c => String.Format("{0:X2} ", c.Char))
.Aggregate((s, i) => s + i))
.Select((s, i) => String.Format("{0:d6}: {1}", i *
bytesPerLine, s)) .Aggregate("", (s, i) => s + i + Environment.NewLine);Console.WriteLine(hexDump); Here is a sample output:000000: FF
FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00000016: 65 00 72
00 73 00 69 00 6F 00 6E 00 3D 00 22 00000032: 31 00 2E
00 30 00 22 00 20 00 65 00 6E 00 63 00000048: 6F 00 64
00 69 00 6E 00 67 00 3D 00 22 00 75 00000064: 3E 00Eric White reports that he typically notices that declarative code is only 20% as long as imperative code.
Cross-posted from http://linqinaction.net