unsigned char对应java_Java的数据类型,怎么就没有uchar呢
作者:陳玨秀
真頭疼,因為java的數(shù)據(jù)類型沒有uchar。今天把之前用C寫的程序改成java的,但是由于java的數(shù)據(jù)類型中沒有uchar,部分內(nèi)容得不到相關(guān)轉(zhuǎn)換。
我想
將圖像src的像素值,然后保存為uchar?格式的數(shù)據(jù),因為uchar的取值范圍是(?0..255?)
在OpenCV中
Mat_對應(yīng)的是CV_8U,Mat_對應(yīng)的是CV_8U,Mat_對應(yīng)的是CV_8S,Mat_對應(yīng)的是CV_32S,Mat_對應(yīng)的是CV_32F,Mat_對應(yīng)的是CV_64F,對應(yīng)的數(shù)據(jù)深度如下:
? CV_8U - 8-bit unsigned integers ( 0..255 )
? CV_8S - 8-bit signed integers ( -128..127 )
? CV_16U - 16-bit unsigned integers ( 0..65535 )
在C語言中
char,類型識別符,字符型。
[signed]char?有符號字符型?長度(字節(jié))為1?-128~127
unsigned char?無符號字符型?長度(字節(jié))為1?0~255
在Java中
char?16位?范圍是2負(fù)的2的15次方到2的15次方的整數(shù)
byte 雖然是8位,但是取值范圍是負(fù)的2的7次方到2的7次方的整數(shù)
網(wǎng)上尋了相關(guān)解決方法:
在Java中,不存在Unsigned無符號數(shù)據(jù)類型,但可以輕而易舉的完成Unsigned轉(zhuǎn)換。
方案一:如果在Java中進(jìn)行流(Stream)數(shù)據(jù)處理,可以用DataInputStream類對Stream中的數(shù)據(jù)以Unsigned讀取。
Java在這方面提供了支持,可以用java.io.DataInputStream
類對象來完成對流內(nèi)數(shù)據(jù)的Unsigned讀取,該類提供了如下方法:
(1)int?readUnsignedByte
()?//從流中讀取一個0~255(0xFF)的單字節(jié)數(shù)據(jù),并以int數(shù)據(jù)類型的數(shù)據(jù)返回。返回的數(shù)據(jù)相當(dāng)于C/C++語言中所謂的“BYTE”。
(2)int readUnsignedShort ()?//從流中讀取一個0~65535(0xFFFF)的雙字節(jié)數(shù)據(jù),并以int數(shù)據(jù)類型的數(shù)據(jù)返回。返回的數(shù)據(jù)相當(dāng)于C/C++語言中所謂的“WORD”,
并且是以“低地址低字節(jié)”的方式返回的,所以程序員不需要額外的轉(zhuǎn)換。
方案二:利用Java位運(yùn)算符,完成Unsigned轉(zhuǎn)換。
正常情況下,Java提供的數(shù)據(jù)類型是有符號signed類型的,可以通過位運(yùn)算的方式得到它們相對應(yīng)的無符號值,參見幾個方法中的代碼:
public int getUnsignedByte (byte
data){?//將data字節(jié)型數(shù)據(jù)轉(zhuǎn)換為0~255 (0xFF 即BYTE)。
return data&0x0FF ;
}
public int getUnsignedByte (short
data){?//將data字節(jié)型數(shù)據(jù)轉(zhuǎn)換為0~65535 (0xFFFF 即 WORD)。
return data&0x0FFFF ;
}?public long getUnsignedIntt (int
data){?//將int數(shù)據(jù)轉(zhuǎn)換為0~4294967295 (0xFFFFFFFF即DWORD)。
return data&0x0FFFFFFFF ;
}
總結(jié)
以上是生活随笔為你收集整理的unsigned char对应java_Java的数据类型,怎么就没有uchar呢的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python re库函数_python
- 下一篇: java 泛型 get()_Java泛型