Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在二进制文件的每个字节后添加空格_Image_Matlab_Binary_Byte_Whitespace - Fatal编程技术网

Image 在二进制文件的每个字节后添加空格

Image 在二进制文件的每个字节后添加空格,image,matlab,binary,byte,whitespace,Image,Matlab,Binary,Byte,Whitespace,我有一个图像的二进制文件,它是256x256数组 我只想在这个文件的每个字节后添加一个空格 e、 g 000010101011101010100 预期产量:0000101 01011101 01010100 如果您已经有了以字符数组形式表示的0/1值,那么有人可以建议我使用matlab来实现这一点吗 a = 101001011111011101010100 100101001010100000111111 100100100001011110110101 00101001111111000000

我有一个图像的二进制文件,它是256x256数组 我只想在这个文件的每个字节后添加一个空格 e、 g 000010101011101010100
预期产量:0000101 01011101 01010100

如果您已经有了以字符数组形式表示的0/1值,那么有人可以建议我使用matlab来实现这一点吗

a =
101001011111011101010100
100101001010100000111111
100100100001011110110101
001010011111110000001010
您可以这样做:

n = 8; %// byte size
b = a(:,ceil(n/(n+1):n/(n+1):end)); %// repeat every n-th position
b(:,n+1:n+1:end) = ' '; %// replace those repeated positions by spaces

b =
10100101 11110111 01010100 
10010100 10101000 00111111 
10010010 00010111 10110101 
00101001 11111100 00001010 

。。。要获得前面提到的char数组,可以执行以下操作:

%edge length of image
edge = 256;

%open and read file
fid = fopen('imageData.txt');
C = fread(fid,[edge+2,edge]);
+2
实际上取决于您的文件,它是否包含回车符?如果没有,就不要说了

% get char array
chararray = char(C(1:edge,:)');
然后,我会进行以下工作:

wordlength = 8;
cellarray = mat2cell(chararray,ones(1,edge),wordlength*ones(1,edge/wordlength));
cellarray = cellfun(@(x) [x ' '],cellarray,'uni',0);
output = cell2mat(cellarray);
%// remove last column with unwanted space
output = output(:,end-1:end)
然后再把它写入一个文件


关于您的评论,请尝试以下内容:

wordlength = 8;
cellarray = mat2cell(chararray,ones(1,edge),wordlength*ones(1,edge/wordlength));
fid2 = fopen( yourFilepath ,'w');
fprintf(fid2 , '%s\r\n', cellarray {:});
fclose(fid2);

您可以使用一个简单的Perl one liner来实现这一点:

perl -e '$/=\1;while(<>){print $_," ";}' < yourFile > newfile
perl-e'$/=\1;while()

$/=\1
设置了记录分隔符,因此我们一次读取一个字节。然后我们进入一个循环,一次读取一个字节,然后打印出来,最后是一个空格,直到文件结束。

您已经读取了文件吗?在矩阵、向量、字符数组中是否有这些0/1值…?是否用于显示?还是要实际更改保存的值?是的,我已经有了该文件。我有一个256x256阵列。我所做的是对矩阵进行转置,并将其调整为8192行8列。但这会产生许多行地址来读取所有数据。所以我想把每个字节分开,这样我就可以直接从同一行读取它们。是的,我想让我的fpga将这些数据作为字节读取。所以,除非我分开字节,否则它会将整行读取为单个数据值。因此,您有一个65536字节的二进制文件,您希望它变成131072字节的文件,其中每秒钟的字节都是一个空格。这是正确的吗?当我尝试创建一个字符数组时,正如您在我的数据文件中所说的,在行尾会出现一个不需要的回车,并且每次在新行上放置越来越多的位时。(第一行字符数组中有256位,下一行有255位,第三行有一位,第四行有254位,第五行有2位)这会影响字节之间空格的输入。如何避免这种情况?最简单的帮助方法是提供文件。问题是:文件是否有换行符?->+1!文件是否有回车符?->+1!是否同时有两个换行符?+2(在
C=fread(fid,[edge+2,edge]);
)另一件事,如果我想添加一个换行符而不是空格,怎么做?即00000000 00000000而不是这个,我希望每个字节都放在一个新行上。我尝试了这个代码。它所做的只是在每个字节列的下面打印。我想让一行中的每个字节先放在一个换行符上,然后再放在下一行上。我会重新编辑我的要求。谢谢你的帮助。我不明白。是的,我想你需要更具体的问题。请添加一个示例文件