【问题标题】:Converting 2s complement/ signed binary to int in R在R中将2s补码/有符号二进制转换为int
【发布时间】:2021-02-23 20:46:21
【问题描述】:

我正在从 ADC IC 接收 16 位 2s 补码或带符号二进制文件。当我收到数据时,它看起来像这样

时间戳、IP、频率、传感器、数据
132493498543616929, 10.0.0.236, 600.000, 321, -8739

132493498543626902、10.0.0.236、600.000、321、-8739

132493498543636875, 10.0.0.236, 600.000, 321, -8739
132493498543636875, 10.0.0.236, 600.000, 321, -13108
132493498543656828, 10.0.0.236, 600.000, 321, -8739
132493498543666795, 10.0.0.236, 600.000, 321, -21846
132493498543676768, 10.0.0.236, 600.000, 321, -21846
132493498543676768, 10.0.0.236, 600.000, 321, -21846
132493498543686741, 10.0.0.236, 600.000, 321, -21846

我想将其转换为签名二进制我的最小可重现代码如下

 library(binaryLogic)
 as.binary(-21846, signed=TRUE, logic=FALSE)
 [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

这给了我想要的二进制值,但是,当我使用它时

Data_as_Binary <- as.binary(-21846, signed=TRUE, logic=FALSE)
Data_as_Binary
TRUE
FALSE
TRUE 
FALSE
TRUE
FALSE

我有 16000 多个值需要在数据框中进行转换,当我 使用 mutate 或 tidyverse 中的任何东西它会返回一个列表 我如何将它折叠成一个变量
将其转换为十六进制没问题,但我必须将其转换为二进制所以现在我已将其转换为二进制,但我需要在最低有效位上添加 1 如何在数据帧中执行此操作? 谢谢阿曼达

【问题讨论】:

  • 列表是存储它们的唯一最佳方式。您可以将它们折叠为字符串,但这需要更多的计算才能将它们转换回二进制
  • 你知道如何将二进制中的 1 添加到二进制数中吗?这是需要做的最后一步,我仍然不确定如何执行该操作
  • 二进制数加1是什么意思?
  • 如果从 2s 补码/有符号二进制到原始数据,我必须在此二进制数的 LSB 中添加 1,因此最后一步是添加 1

标签: r binary adc 16-bit


【解决方案1】:

这是我自己想出来的,给了我想要的东西

 Data_as_bianary<- as.binary(RF_PWR_OFF_600$Data, signed = TRUE, size=2)
  

df<-as.data.frame(Data_as_bianary)
  
df <- as.data.frame(matrix(unlist(Data_as_bianary), ncol = 16))


df_2<-1*df

df_3<-(!df_2)*1

RF_PWR_OFF_600$DAta_to_bin  <- apply( df_3[ , 1:16 ] , 1 , paste , collapse = "" )


RF_PWR_OFF_600 <- RF_PWR_OFF_600%>%
  select(DAta_to_bin) %>%
  mutate_if(is.character,as.numeric) 

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2016-07-16
    • 1970-01-01
    • 2011-09-03
    • 2020-11-26
    相关资源
    最近更新 更多