matlab.io.hdf4.sd.setNBitDataSet
네임스페이스: matlab.io.hdf4.sd
데이터셋 값의 비표준 비트 길이(Nonstandard Bit Length) 지정
구문
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는 가변 길이 비트 필드의 맨 왼쪽 비트를 사용하여 데이터셋 데이터의 맨 왼쪽 비트로 부호 확장(Sign Extension)할지 여부를 지정합니다. 예를 들어, 비트 17-25에서 부호 있는 9비트 정수 데이터가 추출되고 위치 25에 있는 비트가 1인 경우 디스크에서 다시 데이터를 읽어 들이면 비트 26-31이 1로 설정됩니다. 그렇지 않으면, 비트 25가 0이 되고 비트 26-31은 0으로 설정됩니다. ext 파라미터는 true(또는 1)나 false(또는 0)로 설정할 수 있습니다. 부호 확장(Sign Extension)하려면 true로 지정하십시오.
파라미터 fillone은 "백그라운드" 비트를 값 1로 채울지 아니면 값 0으로 채울지를 지정합니다. 이 파라미터도 또한 true(또는 1)나 false(또는 0)로 설정됩니다.
비표준 길이 데이터셋의 "백그라운드" 비트는 디스크에 저장된 비표준 길이 비트 필드의 밖에 있는 비트입니다. 예를 들어, 파라미터 fillone이 true(또는 1)로 설정된 상태에서 비트 5 ~ 9에 위치한 부호 없는 16비트 정수 데이터셋의 5비트가 디스크에 기록되는 경우 데이터를 메모리로 다시 읽어 들이면 비트 0 ~ 4와 비트 10 ~ 15가 1로 설정됩니다. fillone 값이 false(또는 0)일 때 동일한 5비트 데이터가 기록된 경우에는 비트 0 ~ 4와 비트 10 ~ 15가 0으로 설정됩니다.
fillone에 대한 작업은 ext에 대한 작업 전에 수행됩니다. 예를 들어, 위의 ext 예제를 사용하면 비트 0 ~ 16과 비트 26 ~ 31이 먼저 백그라운드 비트 값으로 설정된 후에 25번째 비트의 값에 따라 비트 26 ~ 31이 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);