我需要将给定的文本(不是文件格式)转换为二进制值,并存储在一个单独的数组中,该数组将作为Matlab中其他函数的输入。
实施例: 你好吗?
它将被转换为二进制并存储在一个数组中。我使用了dec2bin()函数,但我没有获得所需的输出。
答案 0 :(得分:0)
听起来有点像技巧问题。在MATLAB中,字符数组(字符串)只是16位无符号字符代码的不同表示。
>> str = 'Hi, how are you?'
str =
Hi, how are you?
>> whos str
Name Size Bytes Class Attributes
str 1x16 32 char
请注意,16个字符占用32个字节,或每个字符2个字节(16位)。来自documentation for char
:
有效代码范围为0到65535,其中代码0到127对应于7位ASCII字符。 MATLAB®可以处理的字符(7位ASCII字符除外)取决于您当前的语言环境设置。要将字符转换为数字数组,请使用double函数。
现在,您可以使用double
,因为它建议将字符代码放入double
数组中,但最小代表只涉及uint16
:
int16bStr = uint16(str)
将其拆分为字节typecast
为8位整数:
typecast(int16bStr,'uint8')
如果你想看到二进制文件(但这些数组已经是二进制数据),产生32 uint8
个值(字节),适合转换为dec2bin
的二进制表示。
如果您不期望除ASCII字符以外的任何内容,只需从开头删除额外的位:
>> int8bStr =
72 105 44 32 104 111 119 32 97 114 101 32 121 111 117 63
>> binStr = reshape(dec2bin(binStr8b.'),1,[])
ans =
110011101110111001111111111111110000001001001011111011000000 <...snip...>