2016-12-18 4 views
2

Учитывая слово, мне нужно найти десятичные значения каждой буквы в этом слове и сохранить его в массиве. Я использовал функцию strtoi для достижения этой цели. Но позже выяснилось ниже две функции, которые должны давать одинаковый результат, дают разные результаты. Может ли кто-нибудь объяснить, почему?
первая попыткаСимвол ASCII до десятичного значения в R

> strtoi("d",16L) 
[1] 13 

вторая попытка

> strtoi(charToRaw("d"),16L) 
[1] 100 

И что 16L в базе srtoi означает? Я довольно новичок в представлении Dec, Hex, Oct из символов ASCII. Поэтому, пожалуйста, поделитесь некоторой информацией об этом.

+1

* Для основания, большего чем 10, буквы от a до z (или от A до Z) используются для представления от 10 до 35. * - от '? Strtoi'. И 'charToRaw (" d ")' оценивается до 64, поэтому во втором вы будете делать 'strtoi (64, 16L)'. Не знаете, почему вы думаете, что они будут одинаковыми. –

ответ

1

только для иллюстрации:

library(purrr) 
library(tibble) 

input_str <- "Alphabet." 

charToRaw(input_str) %>% 
    map_df(~data_frame(letter=rawToChar(.), 
        hex_value=toString(.), 
        decimal_value=as.numeric(.))) 
## # A tibble: 9 × 3 
## letter hex_value decimal_value 
## <chr>  <chr>   <dbl> 
## 1  A  41   65 
## 2  l  6c   108 
## 3  p  70   112 
## 4  h  68   104 
## 5  a  61   97 
## 6  b  62   98 
## 7  e  65   101 
## 8  t  74   116 
## 9  .  2e   46 

Так что вам нужно сделать, можно сделать все в базе R:

as.numeric(charToRaw(input_str)) 
## [1] 65 108 112 104 97 98 101 116 46 

Вы также можете сделать as.integer() против as.numeric() если вам просто нужно/хочу целые числа.

Смежные вопросы