Hello all I have written a C program calling scheme to evaluate logical and arithmetical expressions. It seems to work okay for integers, but floats have me at a loss. Short description of problem: I have a char buffer of known length. I know that the first four bytes represent a float, the second an int, the third an int, and so on. What I would like to do is somehow get this data into the scheme part of my program, preferably in a list form. One way is to use sprintf() to do a crummy sort of conversion, put the results in a null-terminated string, and use with-input-from-string (thanks to Marc for showing me), but that is pretty unpleasant. Are there any better methods? I was thinking about using vectors, but I can't see how that would work. Thanks for your help Alex I suppose I could just pass all 120 arguments to eval_string and list-replace? That seems pretty tedious. Here is more-or-less the relevant part of what I have now
(c-define (eval-string str) (char-string) char-string "eval_string" "extern" (catch-all-errors (lambda () (write-to-string (eval (list-replace from to (read-from-string str)))))))
from is a list of tokens, to is a list of values.
Afficher les réponses par date
Hi,
Alex Ryu ryu.alex@gmail.com writes:
I have written a C program calling scheme to evaluate logical and arithmetical expressions. It seems to work okay for integers, but floats have me at a loss. Short description of problem: I have a char buffer of known length. I know that the first four bytes represent a float, the second an int, the third an int, and so on. What I would like to do is somehow get this data into the scheme part of my program, preferably in a list form.
One option is SRFI-56, which describes a library for parsing binary data, and includes a portable reference implementation. It can handle both 32-bit and 64-bit IEEE floats.