<br><br><div class="gmail_quote">On Wed, Apr 22, 2009 at 9:27 AM, Hynek Vychodil <span dir="ltr"><<a href="mailto:vychodil.hynek@gmail.com">vychodil.hynek@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
There are many many approaches to do this, one that doesn't use io or io_lib follows:<br><br>-module(dump_hex).<br><br>-compile(inline).<br><br>-export([dump_hex/1]).<br><br>dump_hex(L) -> lists:reverse(dump_hex(0, L, [])).<br>
<br>dump_hex(_, [pad | _], R) -> R;<br>dump_hex(_, [], R) -> R;<br>dump_hex(N,<br> [B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13,<br> B14, B15, B16<br> | T],<br> R) -><br> dump_hex(N + 16, T,<br>
[[addr(N), $:,<br> [[$\s | hex(X)]<br> || X<br> <- [B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12,<br> B13, B14, B15, B16]],<br> " - ",<br>
[print(X)<br>
|| X<br> <- [B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12,<br> B13, B14, B15, B16]],<br> $\n]<br> | R]);<br>dump_hex(N, L, R) -><br> dump_hex(N,<br> L ++<br>
[pad, pad, pad, pad, pad, pad, pad, pad, pad, pad, pad,<br> pad, pad, pad, pad, pad],<br> R).<br><br>addr(X) -><br> [nibble(X bsr 28), nibble(X bsr 24), nibble(X bsr 20),<br> nibble(X bsr 16), nibble(X bsr 12), nibble(X bsr 8),<br>
nibble(X bsr 4), nibble(X)].<br><br>hex(pad) -> " ";<br>hex(X) -> [nibble(X bsr 4), nibble(X)].<br><br>nibble(X) -> nibble_(X band 15).<br><br>nibble_(X) when X < 10 -> X + $0;<br>nibble_(X) -> X + $a.<br>
<br>print(pad) -> [];<br>print(X) when X < $\s, X > 126 -> $.;</blockquote><div><br>and another bug, it should be <br> print(X) when X < $\s; X > 126 -> $.;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>print(X) -> X.<br><br>Usage:<br><br>1> c(dump_hex).<br>{ok,dump_hex}<br>2> io:put_chars(dump_hex:dump_hex("teststr1234567890abcd")).<div class="im"><br>
00000000: 74 65 73 74 73 74 72 31 32 33 34 35 36 37 38 39 - teststr123456789<br>00000010: 30 61 62 63 64 - 0abcd<br></div>ok<div><div></div><div class="h5"><br><br><br><div class="gmail_quote">
On Wed, Apr 22, 2009 at 2:03 AM, feiman <span dir="ltr"><<a href="mailto:lfeiman888@gmail.com" target="_blank">lfeiman888@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">hi,All<br>
I have a function from C,which print out detail hex information<br>
about a buffer,who can help me "translate" it into Erlang?<br>
<br>
when I run<br>
const char *teststr = "teststr1234567890abcd";<br>
<br>
dump_hex((const unsigned char *)teststr,strlen(teststr));<br>
<br>
it print out<br>
<br>
00000000: 74 65 73 74 73 74 72 31 32 33 34 35 36 37 38 39 -<br>
teststr123456789<br>
00000010: 30 61 62 63 64 - 0abcd<br>
<br>
thanks all in advance<br>
<br>
void dump_hex( const unsigned char *buf, int len)<br>
{<br>
int i;<br>
int nlocal;<br>
const unsigned char *pc;<br>
char *out;<br>
const unsigned char *start;<br>
char c;<br>
char line[100];<br>
<br>
start = buf;<br>
<br>
while (len > 0)<br>
{<br>
sprintf(line, "%08x: ", buf - start);<br>
out = line + 10;<br>
<br>
for (i = 0, pc = buf, nlocal = len; i < 16; i++, pc++)<br>
{<br>
if (nlocal > 0)<br>
{<br>
c = *pc;<br>
<br>
*out++ = NIBBLE((c >> 4) & 0xF);<br>
*out++ = NIBBLE(c & 0xF);<br>
<br>
nlocal--;<br>
}<br>
else<br>
{<br>
*out++ = ' ';<br>
*out++ = ' ';<br>
} /* end else */<br>
<br>
*out++ = ' ';<br>
} /* end for */<br>
<br>
*out++ = '-';<br>
*out++ = ' ';<br>
<br>
for (i = 0, pc = buf, nlocal = len;<br>
(i < 16) && (nlocal > 0);<br>
i++, pc++, nlocal--)<br>
{<br>
c = *pc;<br>
<br>
if ((c < ' ') || (c >= 126))<br>
{<br>
c = '.';<br>
}<br>
<br>
*out++ = c;<br>
} /* end for */<br>
<br>
*out++ = 0;<br>
<br>
llog(L_NOTICE,"%s", line);<br>
<br>
buf += 16;<br>
len -= 16;<br>
} /* end while */<br>
} /* end dump */<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><br></div></div><font color="#888888">-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss. Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com" target="_blank">www.gooddata.com</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss. Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com">www.gooddata.com</a><br>