result := getStringBitwiseNot("101011100010101010101100010101010101100010101010101100010101010101010101010010101101011100")
msgbox,% convertNumArrayToString(result)
getStringBitAnd(aLeftString, aRightString)
{
return operateStringBit(aLeftString, aRightString, "logicalAnd")
}
getStringBitOr(aLeftString, aRightString)
{
return operateStringBit(aLeftString, aRightString, "logicalOr")
}
getStringBitXor(aLeftString, aRightString)
{
return operateStringBit(aLeftString, aRightString, "logicalXor")
}
getStringBitNot(aLeftString)
{
stringForBitNot := makeString("1", strLen(aLeftString))
return operateStringBit(aLeftString, stringForBitNot, "logicalXor")
}
logicalAnd(aLeft, aRight){
return aLeft & aRight
}
logicalOr(aLeft, aRight){
return aLeft | aRight
}
logicalXor(aLeft, aRight){
return aLeft ^ aRight
}
operateStringBit(ByRef aLeftString, ByRef aRightString, operator)
{
results := convertStringsToNumArrays(aLeftString, aRightString)
leftNumArray := getLeftNumArray(results)
rightNumArray := getRightNumArray(results)
Loop, % leftNumArray.length()
{
leftNumArray[A_Index] := %operator%(leftNumArray[A_Index], rightNumArray[A_Index])
}
return convertNumArrayToString(leftNumArray)
}
convertNumArrayToString(ByRef aArray)
{
result := []
arr := aArray.clone()
loop, % arr.length()
{
result.push(arr.pop())
}
return convertArrayToString(result)
}
convertArrayToString(ByRef aArray, aJoin := "")
{
result := ""
for _, value in aArray
{
result .= value . aJoin
}
return result
}
getLeftNumArray(ByRef aArray)
{
return aArray[1]
}
getRightNumArray(ByRef aArray)
{
return aArray[2]
}
convertStringsToNumArrays(ByRef aLeftString, ByRef aRightString)
{
leftNumArray := convertStringToNumArray(aLeftString)
rightNumArray := convertStringToNumArray(aRightString)
diffIndex := leftNumArray.MaxIndex() - rightNumArray.MaxIndex()
if (0 < diffIndex ) {
theArray := rightNumArray
} else {
theArray := leftNumArray
}
Loop, % abs(diffIndex)
{
theArray.push(0)
}
return [leftNumArray, rightNumArray]
}
convertStringToNumArray(ByRef aStr)
{
arr := []
Loop, % strLen(aStr)
{
arr.push(convertStringToNumber(StringRight(aStr, 1)))
aStr := StringTrimRight(aStr, 1)
}
return arr
}
convertStringToNumber(ByRef aStr)
{
return aStr + 0
}
;stringRight(ByRef aInputVar, aCount) {
; StringRight, outputVar, aInputVar, aCount
; return outputVar
;}
;stringTrimRight(ByRef aInputVar, aCount) {
; StringTrimRight, aInputVar, aInputVar, aCount
; return aInputVar
;}
makeXBitString(aCount)
{
return "1" . makeString("0", aCount)
}
makeString(aString, aCount)
{
result .= ""
loop, % aCount
{
result .= aString
}
return result
}
Last modified : 2017/01/22 20:05:05 JST