Hex Dump using LINQ (in 7 lines of code)
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
00
000016: 65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22
00
000032: 31 00 2E 00 30 00 22 00 20 00 65 00 6E 00 63
00
000048: 6F 00 64 00 69 00 6E 00 67 00 3D 00 22 00 75
00
000064: 3E 00
Eric White reports that he typically notices that
declarative code is only 20% as long as imperative code.
Cross-posted from http://linqinaction.net
