[Rcpp-devel] convert to unsigned char* variable

Gustaf Granath gustaf.granath at gmail.com
Tue Oct 21 22:05:17 CEST 2014


Hi all

Thanks for the replies. After some testing it seems like I dont need the 
unsigned stuff and the functions seems to work fine with just a regular 
int variable. The functions I wanted to use were just small parts of a 
program and in that program bitmap images were loaded and image data 
stored as a unsigned char* (for bitmaps unsigned char are often used due 
to the 0-255 property I believe). I thought the simpliest solution was 
to stick to the original set up (so replicating the variables) but it 
seems that is not necessary which make things easier.

However, I got curious how to handle this if I need it.

First, I still dont get the difference between R raw and unsigned char 
(if there is one). E.g.
this:
unsigned char a = 'b';
cout << hex << a << endl;
equals
 > charToRaw("b")
[1] 62
So can unsigned char be used within Rcpp with RawVector?
For example, is it possible to go from int/char to raw using Rcpp? Or is 
the recommended way to use unsigned char to go outside Rcpp as Tim 
suggested?

Again, thanks for the input,

Gustaf


On 2014-10-21 10:27, Tim Keitt wrote:
>
>
> On Mon, Oct 20, 2014 at 2:17 PM, Gustaf Granath 
> <gustaf.granath at gmail.com <mailto:gustaf.granath at gmail.com>> wrote:
>
>     Hi
>     Im trying to use some C++ functions in R. However, these functions
>     are build around unsigned char* variables (1D array). I have for
>     example a large matrix in R that represents black (e.g. 1-bit
>     image, 0 and 1s). I cant find a solution to convert a character
>     vector into unsigned char* within Rcpp. Im new to Rcpp and C++ so
>     I might have missed something obvious here. Please direct me to
>     resources on this topic (google did not help much).
>
>     A start:
>
>     SEXP test(SEXP cM){
>       CharacterVector Vc(cM);
>       int n = Vr.size();
>       RawVector x(n); //is this the same as unsigned char* ?
>                                 //I tried to fill it with char*(Mr)
>     but I didnt succeed
>     }
>
>
> I tend to go through the standard library as its less of a black box. 
> Try creating a std::string and appending your chars to that string. 
> Then call obj.c_str() to get the C-style array of chars. Or push the 
> chars onto a std::vector and do something like &obj[0] to get a 1-D array.
>
> THK
>
>
>     Thanks,
>
>     Gustaf
>
>     -- 
>     Gustaf Granath (PhD)
>     Post doc
>     McMaster University
>     School of Geography & Earth Sciences
>
>     _______________________________________________
>     Rcpp-devel mailing list
>     Rcpp-devel at lists.r-forge.r-project.org
>     <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>     https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
>
>
>
> -- 
> http://www.keittlab.org/

-- 
Gustaf Granath (PhD)
Post doc
McMaster University
School of Geography & Earth Sciences

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141021/7fc9b6d0/attachment.html>


More information about the Rcpp-devel mailing list