I am writing a Postgres module modeled on the MySQL module.
Postgres sometimes sends binary data as a result of queries.
newlisp strings can contain binary data, right?
Although I could probably work out something with (append), would it make sense to have a (get-bytes <i>addr</i> <i>nbytes</i>) function in the base distribution?
My brain is too fried right now to implement it.
Also, it might be more efficient to use the underlying memcpy() function of C in a builtin (get-bytes ...) rather than me implementing it. Although as my mind works, I do see I could do it in a line or two of code. Once I take a break.
request for get-bytes (to join get-int, get-string, etc)
-
- Posts: 608
- Joined: Mon Feb 05, 2007 1:04 am
- Location: Abbotsford, BC
- Contact:
This is how you can do it:
the variable buffer has now the original binary content in the original byte order and with the correct size information.
And here is a slightly more complicated and slower method:
Code: Select all
(set 'buffer (dup "\000" nbytes))
(cpymem addr buffer nbytes)
And here is a slightly more complicated and slower method:
Code: Select all
(set 'buffer (first (unpack (format "s%d" nbytes) addr)))
-
- Posts: 608
- Joined: Mon Feb 05, 2007 1:04 am
- Location: Abbotsford, BC
- Contact:
Lutz wrote:This is how you can do it:
the variable buffer has now the original binary content in the original byte order and with the correct size information.Code: Select all
(set 'buffer (dup "\000" nbytes)) (cpymem addr buffer nbytes)
And here is a slightly more complicated and slower method:
Code: Select all
(set 'buffer (first (unpack (format "s%d" nbytes) addr)))
Thanks Lutz. Somehow I missed the cpymem function.
Ted