blob: 1094361fd82b31816fbb60b74b72da5d29609b8b [file] [log] [blame]
% File src/library/base/man/hexmode.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2021 R Core Team
% Distributed under GPL 2 or later
\name{hexmode}
\title{Integer Numbers Displayed in Hexadecimal}
\alias{as.hexmode}
\alias{format.hexmode}
\alias{print.hexmode}
\alias{as.character.hexmode}
\alias{[.hexmode}
\alias{!.hexmode}
\alias{|.hexmode}
\alias{&.hexmode}
%% FIXME: xor() is not generic (yet?).
%% \alias{xor.hexmode}
\alias{hexmode}
\description{
Integers which are displayed in hexadecimal (short \sQuote{hex}) format,
with as many digits as are needed to display the largest, using leading
zeroes as necessary.
Arithmetic works as for integers, and non-integer valued mathematical
functions typically work by truncating the result to integer.
}
\usage{
as.hexmode(x)
\method{as.character}{hexmode}(x, \dots)
\method{format}{hexmode}(x, width = NULL, upper.case = FALSE, \dots)
\method{print}{hexmode}(x, \dots)
}
\arguments{
\item{x}{An object, for the methods inheriting from class \code{"hexmode"}.}
\item{width}{\code{NULL} or a positive integer specifying the minimum
field width to be used, with padding by leading zeroes.}
\item{upper.case}{a logical indicating whether to use upper-case
letters or lower-case letters (default).}
\item{\dots}{further arguments passed to or from other methods.}
}
\details{
Class \code{"hexmode"} consists of integer vectors with that class
attribute, used primarily to ensure that they are printed in hex.
Subsetting (\code{\link{[}}) works too, as do arithmetic or
other mathematical operations, albeit truncated to integer.
\code{as.character(x)} converts each entry individually, hence with no
leading zeroes, whereas in \code{format()}, when \code{width = NULL} (the
default), the output is padded with leading zeroes to the smallest width
needed for all the non-missing elements.
\code{as.hexmode} can convert integers (of \link{type} \code{"integer"} or
\code{"double"}) and character vectors whose elements contain only
\code{0-9}, \code{a-f}, \code{A-F} (or are \code{NA}) to class
\code{"hexmode"}.
There is a \code{\link{!}} method and methods for \code{\link{|}} and
\code{\link{&}}:
%% FIXME: xor() is not generic (yet?).
%% and \code{\link{xor}}:
these recycle their arguments to the length of the longer and then
apply the operators bitwise to each element.
}
\seealso{
\code{\link{octmode}}, \code{\link{sprintf}} for other options in
converting integers to hex, \code{\link{strtoi}} to convert hex
strings to integers.
}
\examples{
i <- as.hexmode("7fffffff")
i; class(i)
identical(as.integer(i), .Machine$integer.max)
hm <- as.hexmode(c(NA, 1)); hm
as.integer(hm)
Xm <- as.hexmode(1:16)
Xm # print()s via format()
stopifnot(nchar(format(Xm)) == 2)
Xm[-16] # *no* leading zeroes!
stopifnot(format(Xm[-16]) == c(1:9, letters[1:6]))
## Integer arithmetic (remaining "hexmode"):
16*Xm
Xm^2
-Xm
(fac <- factorial(Xm[1:12])) # !1, !2, !3, !4 .. in hexadecimals
as.integer(fac) # indeed the same as factorial(1:12)
}
\keyword{utilities}
\keyword{print}