Batch file 批处理:二进制字符的按位异或不起作用
我有两个非常长的二进制变量Batch file 批处理:二进制字符的按位异或不起作用,batch-file,Batch File,我有两个非常长的二进制变量a和b,假设它们的长度相同。我想要的很简单:对它们进行异或运算并存储在一个新变量中,就是这样。由于我受够了各种错误,例如Expression.Convert:type'System.Int64'的对象无法转换为type'System.Int32'或值对于UInt32或算术溢出错误将表达式转换为数据类型int,我将自己执行 通过a和b逐位(逐字符)迭代 pos i上的a与b的异或位,并将新创建的异或位连接到新变量newXorVar 这是我的密码: @echo off s
a
和b
,假设它们的长度相同。我想要的很简单:对它们进行异或运算并存储在一个新变量中,就是这样。由于我受够了各种错误,例如Expression.Convert:type'System.Int64'的对象无法转换为type'System.Int32'
或值对于UInt32
或算术溢出错误将表达式转换为数据类型int
,我将自己执行
a
和b
逐位(逐字符)迭代pos i
上的a
与b
的异或位,并将新创建的异或位连接到新变量newXorVar
@echo off
setLocal enableDelayedExpansion
set a=01101000011001010110010101000010101010101010101010111010101010101010101010100000000001101111000010101010101101100011011000110111111010101000001
set b=01110111011011110111001001101100011001000010000111011000110010101100101010000101010101010101100011011000110110001100100001010110110001101100011
set pos=0
set newXorVar=""
:NextChar
::check if each character can be reached --> okay
echo Char %pos% is !a:~%pos%,1! and !b:~%pos%,1!
::XOR each bit --> does not work
set /a xorAB=!a:~%pos%,1!^!b:~%pos%,1!
::echo does not work --> not the desired output
echo !xorAB!
newXorVar=!newXorVar!!xorAB!
set /a pos=pos+1
if "!a:~%pos%,1!" NEQ "" goto NextChar
::output computed newXOR var
echo !newXorVar!
有人能帮我修改代码使其正常工作吗 正如中的用户所指出的,问题是由以下线路引起的:
set/a xorAB=!答:~%pos%,1!^!b:~%pos%,1!
由于插入符号(^
)是最常用的,因此需要对其进行保护。这可以通过加倍或报价来实现:
rem//将`^`加倍以转义自身:
set/a xorAB=!答:~%pos%,1!^^!b:~%pos%,1!
rem//或引用整个表达式以保护“^”:
设置/a“xorAB=!a:~%pos%,1!^!b:~%pos%,1!”
但是,由于您已启用,这也将^
视为转义字符,因此需要再次保护它,以便将其保留:
rem//4倍于`^`以逃避自身:
set/a xorAB=!答:~%pos%,1!^^^^!b:~%pos%,1!
rem//或将其加倍,并引用整个表达式以保护它们:
设置/a“xorAB=!a:~%pos%,1!^^!b:~%pos%,1!”
有关更多详细信息,请参阅此显示线程:正如中的用户所指出的,问题是由以下行引起的:
set/a xorAB=!答:~%pos%,1!^!b:~%pos%,1!
由于插入符号(^
)是最常用的,因此需要对其进行保护。这可以通过加倍或报价来实现:
rem//将`^`加倍以转义自身:
set/a xorAB=!答:~%pos%,1!^^!b:~%pos%,1!
rem//或引用整个表达式以保护“^”:
设置/a“xorAB=!a:~%pos%,1!^!b:~%pos%,1!”
但是,由于您已启用,这也将^
视为转义字符,因此需要再次保护它,以便将其保留:
rem//4倍于`^`以逃避自身:
set/a xorAB=!答:~%pos%,1!^^^^!b:~%pos%,1!
rem//或将其加倍,并引用整个表达式以保护它们:
设置/a“xorAB=!a:~%pos%,1!^^!b:~%pos%,1!”
有关更多详细信息,请参阅此显示线程:使用
set/a“xorAB=!a:~%pos%,1!^^!b:~%pos%,1!”
注意引号和双插入符号:^
。您忘记了这一行中的set
命令:newXorVar=!纽克索瓦!!xorAB代码>我们只能帮助您修复代码,如果您专门向我们解释您的代码是如何无法实现它应该实现的目标的。你的问题不能解释这一点,所以我们没有什么可以帮助你的。请注意,如果你正在寻找合著者,那么你的网站就错了。谢谢你,阿奇尼!我离得够近了。问:为什么我要双插入符号?@Aacini-引号和转义?它应该是一个或另一个,但不是both@dbenham,我猜您错过了这里启用的延迟扩展,因此引号可以保护^
在%
-扩展阶段后不会被识别,但是延迟扩展阶段也会消耗^
来逃避代码>-字符;如果没有引号,我认为有必要使用^^^
设置/a“xorAB=!a:~%pos%,1!^^!b:~%pos%,1!”
注意引号和双插入符号:^
。您忘记了这一行中的set
命令:newXorVar=!纽克索瓦!!xorAB代码>我们只能帮助您修复代码,如果您专门向我们解释您的代码是如何无法实现它应该实现的目标的。你的问题不能解释这一点,所以我们没有什么可以帮助你的。请注意,如果你正在寻找合著者,那么你的网站就错了。谢谢你,阿奇尼!我离得够近了。问:为什么我要双插入符号?@Aacini-引号和转义?它应该是一个或另一个,但不是both@dbenham,我猜您错过了这里启用的延迟扩展,因此引号可以保护^
在%
-扩展阶段后不会被识别,但是延迟扩展阶段也会消耗^
来逃避代码>-字符;如果没有引号,我认为^^^
是必要的。。。