Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
Matlab将24位ascii十六进制文件读入32位带符号_Matlab_Type Conversion - Fatal编程技术网

Matlab将24位ascii十六进制文件读入32位带符号

Matlab将24位ascii十六进制文件读入32位带符号,matlab,type-conversion,Matlab,Type Conversion,我想从一个包含一列24位有符号十六进制值的ascii文件中绘制每9个元素 ex. 813457 123456 241566 etc.. 问题是,我无法让Matlab将800000-FFFFFF值视为负值,大概是因为它不是将其扩展到32位的符号 我曾想过将其拆分为字符串,然后进行转换,但sscanf需要“0x”来转换有符号的%I十六进制值,因此我不得不使用无符号: C = textscan(fp, '%s') %generates 16380x1 cell (instead o

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

ex.
813457
123456
241566
etc..
问题是,我无法让Matlab将800000-FFFFFF值视为负值,大概是因为它不是将其扩展到32位的符号

我曾想过将其拆分为字符串,然后进行转换,但sscanf需要“0x”来转换有符号的%I十六进制值,因此我不得不使用无符号:

 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('ffc0000')就会产生一个正数,如何强制将文件中的所有ascii行作为带符号的24位或32位数据数组导入?

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

  • 使用
    herx2dec
    ,将十六进制字符串转换为
    double
    类型的正整数
  • 将该值转换为
    uint32
    类型
  • 使用将
    uint32
    值解释为
    int32
    (在不更改基础数据的情况下转换数据类型)
  • 例如:

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

    只是想确定一下:
    FFC00000
    的适当结果是什么?应该是-4194304。。。作为一个简单的测试,使用windows的编程计算器,您可以输入负的十进制值,然后切换到十六进制以查看其对应的2的互补十六进制数。请参阅我的回答谢谢,除了数据尚未进行符号扩展(即文件中的数据为24位格式C00000,而不是32位FFC00000),因此,在C00000上使用hex2dec将导致在转换为int32后产生一个正数。@BenNguyen,该方法将起作用。您必须首先使用两个尾随零扩展字符串(以获得完整的32位十六进制表示),进行转换,然后除以'FF'或256,因为此时您将是十进制的。所以:
    padding='00';typecast(uint32(hex2dec(['C00000'填充]),'int32')/256将生成
    -4194304
    。例如,与
    7F0000
    相同的操作将导致
    8323072