一个阿拉伯语字符串保存到一个. txt文件变得扭曲

22日视图(30天)
Charbel
Charbel 2023年6月15日18:51
评论道: Charbel2023年6月16日,霎时一切都
我工作在一个隐写术项目。基本上很容易但是我用阿拉伯语字符。
下面是我写了MATLAB函数。
秘密和求职信息图作为你看到评论的功能。
这个函数的结果如下:
正如您可以看到的,它的工作原理非常漂亮。然而,功能也将结果保存在一个叫做隐藏. txt文件。txt,这里的样子,当我打开它:
这都是无序……我怎样才能解决这个问题呢?
函数隐藏= stegoText ()
%的秘密= 1923;
%支付= 'اناطالبفيالجامعةالامركيةفيبيروت،واناادرسالهندسةالكيميائية”;
file_path =“C: \用户桌面\ \用户名\ secretmessage.txt”;
秘密= fileread (file_path);
file_path =“C: \用户桌面\ \用户名\ covermessage.txt”;
封面= fileread (file_path);
%:处理阿拉伯语的秘密消息
%步骤1:将从阿拉伯语转换成二进制
%为阿拉伯语二进制使用UNICODE字符映射表
mappingTable =表();
mappingTable。阿拉伯语= [“ن”;“ح”;“ط”;“ف”;“ش”;“ا”;“ي”;“ر”;“و”;“ك”;“د”;“ت”;“ز”;“ع”;
“م”;“ص”;“ج”;“ه”;“س”;“ب”;“ذ”;“ض”;“غ”;“ظ”;“ث”;“ق”;“خ”;“ل”;
' ';“،”;“؛”;“。”;“9”;“8”;“7”;“4”;' 1 ';“6”;' 0 ';' 2 ';“5”;“3”;“؟;“َ”;“ِ”;“ؤ”;
“ُ”;“ة”;“ى”;“ْ”;“٠”;“١”;“٣”;“٤”;“٥”;“٦”;“٧”;“٨”;“٩”;
“ء”;“ئ”;“:”;“!”;“٢”];
mappingTable。二元= (“000000”;“000001”;“000010”;“000011”;“000100”;“000101”;“000110”;“000111”;
“001000”;“001001”;“001010”;“001011”;“001100”;“001101”;“001110”;“001111”;“010000”;“010001”;
“010010”;“010011”;“010100”;“010101”;“010110”;“010111”;“011000”;“011001”;“011010”;“011011”;
“011100”;“011101”;“011110”;“011111”;“100000”;“100001”;“100010”;“100011”;“100100”;“100101”;
“100110”;“100111”;“101000”;“101001”;“101010”;“101011”;“101100”;“101101”;“101110”;“101111”;
“110000”;“110001”;“110010”;“110011”;“110101”;“110110”;“110111”;“111000”;“111001”;
“111010”;“111011”;“111100”;“111100”;“111101”;“111111”;“110100”];
secretBinary =;
i = 1:长度(秘密)
指数=找到(mappingTable。阿拉伯语= =秘密(i));
binaryChar = mappingTable。二进制(指数:);
secretBinary = [secretBinary binaryChar];
结束
%步骤2:从二进制转换为DNA
dnaStrand =;
我= 1:2:长度(secretBinary)
段= secretBinary(我+ 1);
开关
情况下“00”
dnaBase =“一个”;
情况下“01”
dnaBase =“C”;
情况下“十”
dnaBase =‘G’;
情况下“11”
dnaBase =“T”;
结束
dnaStrand = [dnaStrand dnaBase];
结束
% 3步:转换从DNA, RNA(取代T, U,添加启动和停止密码子)
rnaStrand = strrep (dnaStrand,“T”,“U”);
startCodon =“8月”;
stopCodon = [“UAA”;“UAG”;佐治亚大学的];
randomIndex =兰迪([1,3]);
rnaStrand = [startCodon rnaStrand stopCodon (randomIndex:)];
%步骤4:Huffmann压缩
numericArray =双(rnaStrand);
符号=独特(numericArray);
概率= 1(大小(符号))/元素个数(符号);
huffDict = huffmandict(符号、概率);
保存(“huffman_dictionary.mat”,“huffDict”);
encodedData = huffmanenco (numericArray huffDict);
encodedString = char (encodedData +' 0 ');
% B部分:嵌入编码的字符串到阿拉伯语覆盖信息
%步骤1:编码秘密消息的大小,包括消息的大小
sizeSecret =长度(encodedString);
sizeCover =长度(封面);
%步骤2:encodedString嵌入到消息
隐藏=;
如果sizeCover < sizeSecret
隐藏=封面消息是不够长;
其他的
我= 1:sizeSecret
位= encodedString(我);
coverChar =封面(i);
如果我= = 1 & &胰岛(coverChar)
如果位= =' 1 '
隐藏=[隐藏coverChar char (hex2dec (“200 d”)));
其他的
隐藏=[隐藏coverChar char (hex2dec (“FEFF”)));
结束
elseif我> 1 & & ~胰岛(封面(张))& &胰岛(coverChar)
如果位= =' 1 '
隐藏=[隐藏coverChar char (hex2dec (“200 d”)));
其他的
隐藏=[隐藏coverChar char (hex2dec (“FEFF”)));
结束
elseif胰岛(coverChar) & &我< sizeCover & &胰岛(封面(i + 1))
如果位= =' 1 '
隐藏=[隐藏coverChar char (hex2dec (“200 e”)));
其他的
隐藏=[隐藏coverChar char (hex2dec (“200 f”)));
结束
elseif胰岛(coverChar) & & (i = = sizeCover | | ~胰岛(封面(i + 1)))
如果位= =' 1 '
隐藏=[隐藏coverChar char (hex2dec (“200 c”)));
其他的
隐藏=[隐藏coverChar char (hex2dec (“200 b”)));
结束
elseif~胰岛(coverChar)
如果位= =' 1 '
隐藏=[隐藏coverChar char (hex2dec (“2009”)));
其他的
隐藏=[隐藏coverChar char (hex2dec (“200”)));
结束
结束
结束
隐藏=[隐藏封面(长度(encodedString) + 1:结束)];
结束
filePath = fullfile (“C:”,“用户”,“用户名”,“桌面”,“stego.txt”);
文件标识= fopen (filePath,' w ',“n”,“UTF-16LE”);
写入文件(文件标识、隐藏、“字符”);
文件关闭(文件标识);
结束

答案(1)

Anush
Anush 2023年6月15日20:59
你好Charbel,
写入文件()函数,做出以下改变:
写入文件(文件标识、隐藏、“字符”,“n”);
这指定本机字节顺序应该编写文件时使用。否则,在指定的字节顺序 fopen () 函数调用。,n, is overridden by the default byte ordering of 写入文件() (即大端法)。

s manbetx 845


释放

R2023a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!