我是matlab的新手。我想将十六进制值存储在数组中,如下所示
P=[0x96,0x97,0x98];
但我在google上浏览我没有解决方案因此首先我将这个十六进制转换为十进制,所以我得到这样的数组
P=[150,151,152];
现在我试图获得P数组值的十六进制值。
我试过
P=[dec2hex(150),dec2hex(151),dec2hex(152)];
但是当我试图打印P(1)然后而不是96时我只得到9.我不理解这一部分。我怎样才能得到正确的结果?请帮帮我。
答案 0 :(得分:4)
Matlab将十六进制数存储为字符数组(或字符串)。
所以
a = dec2hex(150)
返回:
a = '96'
像你一样连接十六进制字符串:
P=[dec2hex(150),dec2hex(151),dec2hex(152)]
返回:
P = '969798'
因此,P(1)=' 9'
您可能希望使用单元格数组分别存储十六进制数字:
P = {dec2hex(150),dec2hex(151),dec2hex(152)};
P{1}
返回:
P = '96'
要检索数值,请使用
hex2dec(P{1})
答案 1 :(得分:2)
请参阅dec2hex
dec2hex - Convert decimal to hexadecimal number in string
您收到string
,因此P(1)
只会为您提供该字符串的第一个字符。
尝试类似:
>> P=[dec2hex(150);dec2hex(151);dec2hex(152)]; % note the ; instead of ,
>> P
P =
96
97
98
>> P(1,:)
ans =
96
但是,P
仍然是一个字符数组。
答案 2 :(得分:2)
您可以arrayfun
使用dec2hex
以元素方式处理它们并生成一个单元格数组作为使用格式0x...
的输出 -
P=[150,151,152] %// Input array
out = arrayfun(@(n) strcat('0x',dec2hex(P(n))),1:numel(P),'Uni',0)
代码运行 -
out =
'0x96' '0x97' '0x98'