我们有Apoc支持Neo4j中的许多功能。但是我想知道我们是否可以对Neo4j中的十六进制执行按位运算。
我的计划是首先使用apoc.util.md5
将两个字符串转换为两个哈希值。然后,我想使用apoc.bitwise.op
对这两个哈希值进行按位运算。但是,apoc.util.md5
给出一个十六进制字符串,而apoc.bitwise.op
只能采用整数。此外,我们知道,md5散列会产生128位结果,这超出了Integer的范围。因此,我想知道是否还有其他方法可以对十六进制字符串执行按位运算。
答案 0 :(得分:0)
以下是非移位按位操作的一种方法概述(但最好编写自己的插件直接执行):
在Cypher中,假设输入的32个字符宽的十六进制字符串,按位运算(例如'|')和另一个操作数作为parameters $input
,{{ 1}}和$operation
:
$operand
实际上,以上内容实际上可以在一个简洁的子句中完成:
WITH [i IN RANGE(0, 24, 8) |
"0000000" + apoc.text.hexValue(
apoc.bitwise.op(
apoc.convert.toInteger("0x" + SUBSTRING($input, i, 8)),
$operation,
apoc.convert.toInteger("0x" + SUBSTRING($operand, i, 8))))
] AS x
RETURN REDUCE(r = "", s IN x | r + SUBSTRING(s, LENGTH(s)-8)) AS res;