如何通过键值增加ascii ord
how to increment ascii ord by key value
我想通过将 ASCII 递增一个键值来加密一个字符串。但是使用这段代码我遇到了问题。
def caesar_cipher(str, key)
new_sentence = []
str.split("").each do |letter|
ascii = letter.ord
puts ascii
ascii += key if ascii >= 65 && ascii <= 90
if ascii > 90
return_start = ascii - 90
ascii = 64 + return_start
end
ascii += key if ascii >= 97 && ascii <= 122
if ascii > 122
return_start = ascii - 122
ascii = 96 + return_start
end
puts ascii
new_sentence << ascii.chr
end
puts new_sentence
end
caesar_cipher("Wh", 5)
我放了一些 puts
看看会发生什么,当我 puts ascii
我发现 return 我不是好数字。对于 'W' 一切都很好。他从 87
开始,然后转到 66
。但我不明白为什么 'h' 有问题。他从 104
开始,然后转到 78
。为什么他不去 109
?
简短的回答:因为你告诉它。
if ascii > 90 # "h".ord == 104 so this is true
return_start = ascii - 90 # return_start is now 14
ascii = 64 + return_start # ascii is now 64 + 14 (78)
# Note this is a elaborate way of subtracting 26 from ascii
end
像这样编码时,尝试使用 p
打印中间值和结果:
if ascii > 90
p return_start = ascii - 90
p ascii = 64 + return_start
end
我想通过将 ASCII 递增一个键值来加密一个字符串。但是使用这段代码我遇到了问题。
def caesar_cipher(str, key)
new_sentence = []
str.split("").each do |letter|
ascii = letter.ord
puts ascii
ascii += key if ascii >= 65 && ascii <= 90
if ascii > 90
return_start = ascii - 90
ascii = 64 + return_start
end
ascii += key if ascii >= 97 && ascii <= 122
if ascii > 122
return_start = ascii - 122
ascii = 96 + return_start
end
puts ascii
new_sentence << ascii.chr
end
puts new_sentence
end
caesar_cipher("Wh", 5)
我放了一些 puts
看看会发生什么,当我 puts ascii
我发现 return 我不是好数字。对于 'W' 一切都很好。他从 87
开始,然后转到 66
。但我不明白为什么 'h' 有问题。他从 104
开始,然后转到 78
。为什么他不去 109
?
简短的回答:因为你告诉它。
if ascii > 90 # "h".ord == 104 so this is true
return_start = ascii - 90 # return_start is now 14
ascii = 64 + return_start # ascii is now 64 + 14 (78)
# Note this is a elaborate way of subtracting 26 from ascii
end
像这样编码时,尝试使用 p
打印中间值和结果:
if ascii > 90
p return_start = ascii - 90
p ascii = 64 + return_start
end