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

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)中会发生什么。

A. *_*nda 5

正如 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)