Matlab将24位ascii-hex文件读入32位带符号

时间:2014-09-07 21:41:28

标签: matlab type-conversion

我想从包含一列24位有符号十六进制值的ascii文件中绘制每个第9个元素

ex.
813457
123456
241566
etc..

问题是,我无法让Matlab将值800000-FFFFFF视为负值,大概是因为它没有将其扩展为32位。

我想把它分解成字符串然后转换,但是sscanf需要'0x'来转换有符号的%i十六进制值,所以我不得不使用unsigned:

 C = textscan(fp, '%s')        %generates 16380x1 cell  (instead of normal array?!)
 sscanf (C{1,1}{1,1}, '%x')    %convert first ascii hex element from cell to unsigned hex

有趣的是,作为一个测试,只需执行hex2dec('FFC00000')就会生成一个正数,如何强制将文件中的所有ascii行导入为带符号的24或32位数据?

1 个答案:

答案 0 :(得分:0)

要进行所需的转换,您可以按以下步骤操作:

  1. 使用double,从十六进制字符串转换为herx2dec类型的正整数,正如您已经完成的那样。
  2. 将该值转换为uint32类型。
  3. 使用typecastuint32值解释为int32(转换数据类型而不更改基础数据)。
  4. 示例:

    >> typecast(uint32(hex2dec('FFC00000')),'int32')
    ans =
        -4194304