Re: [R] hex format

From: Peter Wolf <s-plus_at_wiwi.uni-bielefeld.de>
Date: Fri 08 Apr 2005 - 01:40:27 EST

Steve Vejcik wrote:

>Thanks for your advice. Unfortunately, your answers are inconsistent:
>as.numeric("0x1AF0") returns a decimal value for a hex string. I'd like
>to do the opposite-use hex notation to represent a decimal.
>e.g.
> x<-0x000A
> y<-0x0001
> x+y=0x00B
>
> Cheers.
>
you can use chcode() to define hex.to.dec(), dec.to.hex() and sum.hex() to operate with hex numbers.

Peter Wolf


<<define chcode>>=
chcode <- function(b, base.in=2, base.out=10, digits="0123456789ABCDEF"){

   # change of number systems, pwolf 10/02    # e.g.: from 2 2 2 2 ... -> 16 16 16 ...    digits<-substring(digits,1:nchar(digits),1:nchar(digits))    if(length(base.in)==1) base.in <- rep(base.in, max(nchar(b)-1))    if(is.numeric(b)) b <- as.character(as.integer(b))    b.num <- lapply(strsplit(b,""), function(x) match(x,digits)-1 )    result <- lapply(b.num, function(x){

                cumprod(rev(c(base.in,1))[ 1:length(x) ] ) %*% rev(x)
             } )

   number<-unlist(result)
   cat("decimal representation:",number,"\n")

   if(length(base.out)==1){

      base.out<-rep(base.out,1+ceiling(log( max(number), base=base.out ) ) )    }
   n.base <- length(base.out); result <- NULL    for(i in n.base:1){

     result <- rbind(number %% base.out[i], result)
     number <- floor(number/base.out[i])
   }
   result[]<-digits[result+1]
   apply(result, 2, paste, collapse="")
}

@
<<define hex.to.dec, dec.to.hex and sum.hex>>=

hex.to.dec<-function(x) as.numeric(chcode(x, base.in=16, base.out=10))
dec.to.hex<-function(x) chcode(x, base.in=10, base.out=16)
sum.hex<-function(x,y) dec.to.hex(hex.to.dec(x) + hex.to.dec(y))

@
quick test:

<<define hex numbers>>=
a<-dec.to.hex(10); print(a)
b<-dec.to.hex(3);print(b)

@
output-start
decimal representation: 10
[1] "0A"
decimal representation: 3
[1] "03"
output-end

@
<<sum of a and b>>=
sum.hex(a,b)

@
output-start

decimal representation: 10
decimal representation: 3
decimal representation: 13

Thu Apr 7 17:31:42 2005
[1] "0D"
output-end

>
>



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Fri Apr 08 01:46:45 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:03 EST