Этот вопрос может быть полезен: Как преобразовать целое число в двоичный вектор?
your_pixels <- c(0,1,100,255)
your_bits <- sapply(your_pixels, function(x) as.integer(intToBits(x)))
your_bits
[,1] [,2] [,3] [,4]
[1,] 0 1 0 1
[2,] 0 0 0 1
[3,] 0 0 1 1
[4,] 0 0 0 1
[5,] 0 0 0 1
[6,] 0 0 1 1
[7,] 0 0 1 1
[8,] 0 0 0 1
[9,] 0 0 0 0
[10,] 0 0 0 0
[11,] 0 0 0 0
[12,] 0 0 0 0
[13,] 0 0 0 0
[14,] 0 0 0 0
[15,] 0 0 0 0
[16,] 0 0 0 0
[17,] 0 0 0 0
[18,] 0 0 0 0
[19,] 0 0 0 0 # notice, no data here
[20,] 0 0 0 0
[21,] 0 0 0 0
[22,] 0 0 0 0
[23,] 0 0 0 0
[24,] 0 0 0 0
[25,] 0 0 0 0
[26,] 0 0 0 0
[27,] 0 0 0 0
[28,] 0 0 0 0
[29,] 0 0 0 0
[30,] 0 0 0 0
[31,] 0 0 0 0
[32,] 0 0 0 0
Затем, чтобы получить значение для вашего теста # 19, используйте your_bits[19,]
(еслиВы считаете 19 с начала числа, в этом случае your_bits[14,]
).Тем не менее, вы заметите, что 19-й бит для всего диапазона 0:255
будет равен 0. Самый старший бит, используемый в числе 255, - это 8-й бит.
Самым распространенным кодированием изображения обычно является RGBA, что32 бита на пиксель (0: 255 для каждого канала, красный / синий / зеленый / альфа).Вы упомянули, что ваше изображение имеет 48 бит на пиксель.Целые числа в R ограничены 32 битами (а intToBits
работает только с целыми числами), поэтому вам понадобятся некоторые подробности о том, как вы читаете пиксели в значения.
Существуют пакеты, которые нужно вернутьдвоичное представление больших чисел, например bit64
: https://cran.r -project.org / web / packages / bit64 / index.html
library(bit64)
your_pixels48 <- c(0, 1, 100, 255, 2^48-1)
[1] 0.00000e+00 1.00000e+00 1.00000e+02 2.55000e+02 2.81475e+14
your_pixels48 <- as.integer64(your_pixels48)
integer64
[1] 0 1 100 255 281474976710655
your_bits48 <- as.bitstring(your_pixels48)
[1] "0000000000000000000000000000000000000000000000000000000000000000"
[2] "0000000000000000000000000000000000000000000000000000000000000001"
[3] "0000000000000000000000000000000000000000000000000000000001100100"
[4] "0000000000000000000000000000000000000000000000000000000011111111"
[5] "0000000000000000111111111111111111111111111111111111111111111111"
Однако обратите внимание, что это возвращаетстрока двоичного представления.В этом случае вы можете использовать строковые операции для доступа к 19-му слоту:
substr(your_bits48, start = 19, stop = 19)
[1] "0" "0" "0" "0" "1"
Который затем вам нужно снова привести к числу с помощью as.numeric
или as.integer
.Однако это считается с начала числа, а не с конца, поэтому вам действительно нужно start=
и stop=
при (64:1)[19]
или 46.
Предположительно, вам нужно больше данных, чем только 19-го числа.значение, так что вы также можете использовать strsplit(your_bits48, "")
, чтобы разбить цепочку битов на каждое значение, которое затем можно проиндексировать любым удобным для вас способом.