【问题标题】:Array contents display in pairs数组内容成对显示
【发布时间】:2014-09-12 08:56:02
【问题描述】:

我有一个数组,例如:A=[01 255 03 122 85 107];,我想将内容打印为

  A=
   FF 01 
   7A 03   
   6B 55

基本上是从内存中读取。 MatLab lib中有什么功能吗?我需要用最少的循环来做到这一点。

【问题讨论】:

  • 看起来像 code golf 问题 ;) - 所以我的建议是 ([1,10]*reshape(A,2,[]))'(25 个字符)
  • rot90(reshape(A,2,[]),3)(24 个字符):-) @bdecaf
  • A=[01 FF 03 7A 55 6B] 不适用于 MATLAB。
  • 所以它是十六进制值和大字节序...我猜在这个问题中它展示了如何在 matlab 中使用它:stackoverflow.com/questions/20535028/…
  • 发布输入和预期输出的最小可行示例?我想输出是有道理的,但你的输入没有。输入是 char 数组还是元胞数组? stackoverflow.com/help/mcve

标签: arrays matlab parsing printf


【解决方案1】:

使用这个 -

str2num(num2str(fliplr(reshape(A,2,[])'),'%1d'))

输出 -

ans =
    21
    43
    65
    87

如果只想打印为字符,不用str2num就用,像这样-

num2str(fliplr(reshape(A,2,[])'),'%1d')

输出 -

ans =
21
43
65
87

用零填充的一般情况 -

A=[1 2 3 4 5 6 7 8 9 3] %// Input array
N = 3; %// groupings, i.e. 2 for pairs and so on
A = [A zeros(1,N-mod(numel(A),N))]; %// pad with zeros
out = str2num(num2str(fliplr(reshape(A,N,[])'),'%1d'))

输出 -

out =
   321
   654
   987
     3

修改十六进制数字:

Ar = A(flipud(reshape(1:numel(A),2,[])))
out1 = reshape(cellstr(dec2hex(Ar))',2,[])'
out2 = [char(out1(:,1)) repmat(' ',[numel(A)/2 1]) char(out1(:,2))]

输出 -

out1 = 
    'FF'    '01'
    '7A'    '03'
    '6B'    '55'
out2 =
FF 01
7A 03
6B 55

【讨论】:

  • 谢谢 .. 如果数组长度为奇数,这可以扩展为工作。添加零以使其均匀
  • @crazy_bean 在使用此代码之前试试这个 - A = [A zeros(1,mod(numel(A),2))]?另外,A 中可以有两位或三位或更多位数吗?如果是这样,那可能会使事情复杂化。
  • 是的,数组只包含 2 位数字
  • @crazy_bean 我的意思是 A 可以有两位数字作为元素,比如 - A = [2 11 23 3 77]?
  • 是的,数组的元素总是 A=[02 11 23 FF 7A]。它是从内存中读取的 8 位数据,因此也可以是十六进制格式
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多