一种可能性是使用TYPECAST http://www.mathworks.com/help/techdoc/ref/typecast.html将数值转换为 UINT8 字节的函数(仅适用于完整的非复杂数值)。
请注意,在序列化之前必须将矩阵重新整形为向量,因此其大小也必须单独存储(甚至使用相同的过程进行序列化):
%# sample matrix
M = rand(3,4);
%# convert
b_sz = typecast(size(M),'uint8'); %# serialized matrix size
b = typecast(M(:),'uint8'); %# serialized vector
现在您可以存储b
and b_sz
作为字节序列存入数据库(范围内的整数[0,255]
)
>> whos b b_sz
Name Size Bytes Class Attributes
b 96x1 96 uint8
b_sz 16x1 16 uint8
接下来,当您从数据库检索这些值时,可以使用逆过程将它们转换回双精度值,并将矩阵重塑为其原始大小:
MM = reshape(typecast(b,'double'), typecast(b_sz,'double'));
%# compare against original matrix
isequal(M,MM)
或者,如果您的数据库不支持数组类型,您可以将字节序列转换为字符串,并将其存储在 VARCHAR 类型的字段中:
%# as string
str = sprintf('%d ',b);
%# recover bytes from string
b = uint8(str2num(str));