Matlab:字符串向量 - 字符减法

时间:2013-11-17 15:22:57

标签: matlab syntax cryptography octave encryption

我正在尝试为移位(Ceasar)加密密码制作基于线性代数的算法。假设我有一个字符串:'你好'。当我试图将它转换为(int)数字矩阵时,我这样做:

'hello' - 'a'

结果是

ans =

 7     4    11    11    14

这是期望的结果。但如果我减去字符'g',结果将是

ans =

 1    -2     5     5     8

我想问一下当我减去一个字符时Matlab(或Octave)会发生什么,我得到上面的结果。

2 个答案:

答案 0 :(得分:4)

正如Mohit Jain所写,你得到的结果是基于转换为ASCII,这是对文本信息进行数字编码的最广泛接受的方式。 ASCII也作为Unicode当前标准的子集包含在内,并且在支持平台上,Matlab实际上使用了16位Unicode编码,这使得它不仅能够代表支持英文文本的ASCII的95个可打印字符,但是大量的国际剧本,数学应用中的特殊字符,排版和many other fields。 Matlab中数字和字符数据之间的显式转换是通过chardouble完成的:

>> 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