Iri*_*Dog 2 encryption syntax matlab cryptography octave
我正在尝试为 shift(Ceasar) cryptography cipher 制作一个基于线性代数的算法。假设我有一个字符串:'hello'。当我尝试将其转换为 (int) 数字矩阵时,我会这样做:
'hello' - 'a'
Run Code Online (Sandbox Code Playgroud)
结果是
ans =
7 4 11 11 14
Run Code Online (Sandbox Code Playgroud)
这是想要的结果。但如果我减去字符 'g' 结果将是
ans =
1 -2 5 5 8
Run Code Online (Sandbox Code Playgroud)
我想问一下当我减去一个字符并得到上面的结果时,在 Matlab(或 Octave)中会发生什么。
正如 Mohit Jain 所写,您得到的结果基于向ASCII的转换,这是对文本信息进行数字编码的最广泛接受的方式。ASCII 也作为Unicode当前标准的一个子集包含在内,并且在支持平台上,Matlab 实际上使用了 16 位 Unicode 编码,这使得它不仅可以表示支持英文文本的 ASCII 的 95 个可打印字符,还可以表示大量的国际文字、特殊字符在数学、排版和许多其他领域的应用。Matlab 中数字和字符数据之间的显式转换是通过char
和完成的double
:
>> double('aA?')
ans =
97 65 916
Run Code Online (Sandbox Code Playgroud)
小拉丁字母“a”的 ASCII 码为 97,大拉丁字母“A”的 ASCII 码为 65,大希腊字母 Delta 的 Unicode 编号为 916。由于拉丁字母按顺序编码为 97 到 122对于小写字母和 65 到 90 为大写字母,您可以生成英文字母表,例如:
>> char(65 : 90)
ans =
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)
当您-
对字符串应用算术运算符时,字符会隐式转换为数字,就像您使用过的一样double
>> double('hello')
ans =
104 101 108 108 111
>> double('g')
ans =
103
Run Code Online (Sandbox Code Playgroud)
因此'hello' - 'a'
与
>> [104 101 108 108 111] - 103
ans =
1 -2 5 5 8
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
453 次 |
最近记录: |