首页 > 解决方案 > 如何正确表示 4 位整数?

问题描述

我需要将矩阵转换为十六进制文件输出。矩阵中的每个条目都需要转换为 4 位十六进制数字 (8) 并输出为一维数组。

> matrix(c(0,0,0,5,0,0,5,5,0,0,5,0),nrow=3,ncol=4,byrow=T)
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    5
[2,]    0    0    5    5
[3,]    0    0    5    0

这是一个 3 行 4 列的矩阵,大部分为 0,部分为 5。我想要的输出应该类似于

#> as.raw(c(0,8,0,136,0,128))
> as.raw(solution)
[1] 00 08 00 88 00 80

我试图做一些简单的

> sidewaysraw<-as.raw(ifelse(mymat==5, 8,0))

但是 ifelse 中的 8 当然是一个 16 位整数,所以它总是一个 0x08。我没有看到将 55s 转换为 0x88s、05s 转换为 0x08s 和 50s 转换为 0x80s 的巧妙方法......

有没有一种平滑的方法可以让 R 使用 4 位整数?

标签: r

解决方案


似乎您可以做一些矩阵乘法来提供帮助。首先我们可以定义一个“平移矩阵”

digits <- matrix(c(128,8,0,0,0,0,128,8), nrow=4, ncol=2)

然后你可以得到你的号码

(dd==5) %*% digits
#      [,1] [,2]
# [1,]    0    8
# [2,]    0  136
# [3,]    0  128

然后用转置以正确的顺序提取它们

as.raw(t((dd==5) %*% digits))
# [1] 00 08 00 88 00 80

这应该是有效的,并且不会打扰字符串操作。


推荐阅读