Kev_T
Kev_T

Reputation: 705

Create decimal values of character hex

With the following code I'm reading a text file and displaying one column on the screen.

externalData <- read.delim("testdata.txt", header = FALSE, sep = "@")

i = 1;
while(i < 11) {
  appel <- as.character(externalData[i,3,1])
  i = i + 1;
  print(appel)
}

The output looks like this:

I'm trying to convert these values from hexadecimal to decimal.

I've tried the following:

strtoi(c(appel))

but this doesn't seem to work, this only removes the quotation marks from the first one and the last one, and sets everything in-between to N/A (probably because there are letters in them).

Upvotes: 1

Views: 273

Answers (2)

Darren Tsai
Darren Tsai

Reputation: 35594

Here are 3 ways to convert hexadecimal(character) to decimal(numeric).

x <- c("158308", "bb1787", "853f91")

# 1.
strtoi(x, base = 16L)

# 2.
as.integer(as.hexmode(x))

# 3.
as.integer(paste0("0x", x))
# more general edition:
# as.integer(ifelse(!grepl("^0x", x), paste0("0x", x), x))

Upvotes: 3

dario
dario

Reputation: 6483

From ?strtoi

Convert strings to integers according to the given base using the C function strtol, or choose a suitable base following the C rules.

Arguments

x a character vector, or something coercible to this by as.character.

base an integer which is between 2 and 36 inclusive, or zero (default).

1.Create a reproducible minimal example

appel <- c("158308", "d8db89")

2.Solution using strtoi base argument:

strtoi(appel, base=16)

Returns:

[1]  1409800 14211977

Upvotes: 2

Related Questions