R查找十六进制字符串的两个整数转换之间的重叠

toe95027  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一些十六进制格式的区域标志,例如。“090A”、“3BFF”、“0400”、“2025”。
在SQL中,我可以使用以下语法来计算2个区域标志之间的重叠,例如:

SELECT 
STRTOL('090A', 16) as area1
,STRTOL('3BFF', 16) as area2
,STRTOL('090A', 16) & STRTOL('3BFF', 16) as overlap;

| 区域1|区域2|重叠|
| - -----|- -----|- -----|
| 二三一四|15359|二三一四|
这表明区域1完全包括在区域2中。
另一个例子:

SELECT 
STRTOL('0400', 16) as area3
,STRTOL('2025', 16) as area4
,STRTOL('0400', 16) & STRTOL('2025', 16) as overlap;

| 区域3|区域4|重叠|
| - -----|- -----|- -----|
| 一零二四|八二二九|0|
这表明在区域3和区域4之间没有重叠。
我看到我们可以使用R.utils::strtoi,这为我在SQL中获得的每个区域提供了相同的转换。但是如果我使用语法

strtoi("0400", 16L) & strtoi("2025", 16L)

即使没有重叠,也会得到TRUE。有没有一种方法可以像在SQL中一样使用strtoi来获得R中的重叠?

uyto3xhc

uyto3xhc1#

你可以使用函数bitwAnd()来计算按位和:

bitwAnd(strtoi("0400", 16L), strtoi("2025", 16L))
## [1] 0
bitwAnd(strtoi("090A", 16L), strtoi("3BFF", 16L))
## [1] 2314

这是因为

strtoi("0400", 16L) & strtoi("2025", 16L)

TRUE是这样的:&是R中的逻辑与运算符。而大于0的数字则转换为TRUE。所以你的代码相当于

TRUE & TRUE

其评估为TRUE

相关问题