Как преобразовать шестнадцатеричное число в число, сохраняющее знак (+/-) в R? - PullRequest
0 голосов
/ 26 марта 2020

Я впервые постер, извините, если формат не совсем такой, как требуется.

У меня есть фрейм данных, который выглядит примерно так: каждая строка содержит три столбца шестнадцатеричных строк:

   id   x
1  1   FFF8
2  2   FFBC
3  3   FFAE
4  4   0068

Если я правильно понимаю, «FFF8» должен преобразовываться в «-8», однако все, что мне удалось сделать, - это преобразовать его в положительный эквивалент - «65528».

Я использовал:

dataframe$x<-as.numeric(dataframe$x)

Я не нашел ни одной функции R, которая могла бы поддерживать знак минус, как предполагалось.

Может ли кто-нибудь любезно помочь с преобразованием шестнадцатеричные строки в число при сохранении предполагаемого знака минус?

Большое спасибо заранее.

1 Ответ

2 голосов
/ 26 марта 2020

Если вы предполагаете, что старший бит указывает на отрицательное значение, то

strtoi(dat$x, base=16)
# [1] 65528 65468 65454   104
dat$x2 <- strtoi(dat$x, base=16)
dat$x3 <- ifelse(bitwAnd(dat$x2, 0x8000) > 0, -0xFFFF-1, 0) + dat$x2
dat
#   id    x    x2  x3
# 1  1 FFF8 65528  -8
# 2  2 FFBC 65468 -68
# 3  3 FFAE 65454 -82
# 4  4 0068   104 104
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...