[R] how to pass 'raw' values with cfunction()?

Dan Kelley dan.kelley at DAL.CA
Sat Mar 17 19:02:13 CET 2012


Thanks.  .Call is better.  But how do I get the actual value of the byte (0F)?  (Updated code below.  I does not compile if I use as_RAW(*b), so I suppose that's not the method I should use.)

## test with raw
library(inline)
code <- 'Rprintf("inside f(), b is 0X%x (compare %X%x)\\n", AS_RAW(b), 0x0f); return(R_NilValue);'
f <- cfunction(sig=signature(b="raw"),
               body=code,
               convention=".Call")
b <- as.raw(0x0f)
for (i in 1:5)
    f(b)




On 2012-03-17, at 2:49 PM, Dirk Eddelbuettel wrote:

> 
> On 17 March 2012 at 14:34, Dan Kelley wrote:
> | I am having trouble handing "raw" data to a C function, using "cfunction", as demonstrated in the function and output pasted below.  Can anyone suggest what I'm doing incorrectly?  Thanks.  Dan Kelley [Dalhousie University].
> 
> Don't use the .C convention:
> 
> R> library(inline)
> R> 
> R> code <- 'Rprintf("inside f(), b is 0X%x\\n", *b);'
> R> f <- cfunction(sig=signature(b="raw"),
> +                body=code,
> +                convention=".C")
> R> b <- as.raw(0x0f)
> R> for (i in 1:5)
> +     f(b)
> inside f(), b is 0X90
> inside f(), b is 0X80
> inside f(), b is 0X70
> inside f(), b is 0X60
> inside f(), b is 0X30
> R> 
> R> f2 <- cfunction(sig=signature(b="raw"), body='
> +    Rprintf("inside f(), b is 0X%x\\n", AS_RAW(b));
> +    return(R_NilValue);
> + ')
> R> b <- as.raw(0x0f)
> R> for (i in 1:5)
> +     f2(b)
> inside f(), b is 0X39bf9e8
> inside f(), b is 0X39bf9e8
> inside f(), b is 0X39bf9e8
> inside f(), b is 0X39bf9e8
> inside f(), b is 0X39bf9e8
> R> 
> R> 
> 
> Dirk
> 
> -- 
> "Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
> dark to read." -- Groucho Marx
> 



More information about the R-help mailing list