matlab.io.hdf4.sd.setNBitDataSet
包: matlab.io.hdf4.sd
为数据集值指定非标准位长度
语法
setNBitDataSet(sdsID,startBit,bitlen,ext,fillone)
说明
setNBitDataSet(sdsID,startBit,bitlen,ext,fillone)
指定 sdsID
标识的整数数据集包含 startBit
和 bitlen
定义的非标准长度的数据。
可指定 1 和 32 位之间的任意长度。在为数据集数组调用了 setNBitDataset
之后,任何读写操作都将涉及数据集数组的新数据长度与读/写缓冲区数据长度之间的转换。
所有数据类型的位长度都从以 0 开始的位域右侧计算。在包含值 01111011 的位域中,位 2 和 7 将设置为 0,所有其他位都将设置为 1。最低有效位是位 0。
startBit
参数指定要写入的变量长度位域的最左侧位置。例如,在上一段落中所述的位域中,设置为 4 的 startBit
参数对应于从右侧起的第四个位值 1。
bitlen
参数指定要写入的可变长度位域的位数。此数字包含起始位,计数时从左端向位域右端(位数较低的方向)计数。例如,在第 5 位开始写入上一段落中所述的位域的 4 位,会将位域 1110 写入数据集中。这对应于 startBit
值 5 和 bitlen
值 4。
参数 ext
指定是否使用可变长度的位域的最左侧位将符号扩展到数据集数据的最左侧位。例如,如果从 17-25 位中提取了 9 位有符号整数数据并且位置 25 中的位为 1,则当数据读取回磁盘时,26-31 位将设置为 1。否则,25 位将为 0,26-31 位将设置为 0。ext
参数可设置为 true
(或 1)或 false
(或 0);指定 true
可进行符号扩展。
参数 fillone
指定是否使用值 1 或 0 填充“背景”位。此参数也设置为 true
(或 1)或 false
(或 0)。
非标准长度数据集的“背景”位是位于存储在磁盘上的非标准长度位域外部的位。例如,如果将 16 位无符号整数数据集中位于 5-9 位的 5 位写入磁盘并将 fillone
参数设置为 true
(或 1),则当该数据重新读入内存中时,0-4 位及 10-15 位将设置为 1。如果在 fillone
值设置为 false
(或 0)时写入同样的 5 位数据,则 0-4 位及 10-15 位将设置为 0。
fillone
运算的执行顺序先于 ext
运算。例如,使用上面的 ext
示例,0-16 位及 26-31 位将首先设置为背景位值,随后 26-31 位将基于第 25 位的值设置为 1 或 0。
此函数对应于 HDF 库 C API 中的 SDsetnbitdataset
函数。
示例
import matlab.io.hdf4.* sdID = sd.start('myfile.hdf','create'); sdsID = sd.create(sdID,'temperature','int32',[10 20]); sd.setNBitDataSet(sdsID,6,4,0,0); data = int32([1:200]); data = reshape(data,10,20); sd.writeData(sdsID,[0 0],data); sd.endAccess(sdsID); sd.close(sdID);