我正在尝试为移位(Ceasar)加密密码制作基于线性代数的算法。假设我有一个字符串:'你好'。当我试图将它转换为(int)数字矩阵时,我这样做:
'hello' - 'a'
结果是
ans =
7 4 11 11 14
这是期望的结果。但如果我减去字符'g',结果将是
ans =
1 -2 5 5 8
我想问一下当我减去一个字符时Matlab(或Octave)会发生什么,我得到上面的结果。
答案 0 :(得分:4)
正如Mohit Jain所写,你得到的结果是基于转换为ASCII,这是对文本信息进行数字编码的最广泛接受的方式。 ASCII也作为Unicode当前标准的子集包含在内,并且在支持平台上,Matlab实际上使用了16位Unicode编码,这使得它不仅能够代表支持英文文本的ASCII的95个可打印字符,但是大量的国际剧本,数学应用中的特殊字符,排版和many other fields。 Matlab中数字和字符数据之间的显式转换是通过char
和double
完成的:
>> double('aAΔ')
ans =
97 65 916
一个小的拉丁字母'a'具有ASCII码97,一个大的拉丁字母'A'是ASCII码65,一个大的希腊字母Delta具有Unicode编号916.由于拉丁字母按顺序编码对于小写字母为97到122,对于大写字母为65到90,您可以生成英文字母,例如像这样:
>> char(65 : 90)
ans =
ABCDEFGHIJKLMNOPQRSTUVWXYZ
将-
之类的算术运算符应用于字符串时,字符会隐式转换为数字,就像您使用double
>> double('hello')
ans =
104 101 108 108 111
>> double('g')
ans =
103
因此'hello' - 'a'
与
>> [104 101 108 108 111] - 103
ans =
1 -2 5 5 8
答案 1 :(得分:1)
它将字符串的字符更改为其ascii值,然后减去每个值
'hello' - 'a' = 7 4 11 11 14 because h - a = 8 -1 =7
(these should be ascii values but i am using these values for simplicity because its all relative)
e-a=5-1=4
l-a = 12-1 =11 and so on
'hello' - 'g'
h-g=8-7=1
e-g=5-7=-2 and so on