unsigned char对应java_Java的数据类型,怎么就没有uchar呢
作者:陳玨秀
真頭疼,因?yàn)閖ava的數(shù)據(jù)類型沒(méi)有uchar。今天把之前用C寫(xiě)的程序改成java的,但是由于java的數(shù)據(jù)類型中沒(méi)有uchar,部分內(nèi)容得不到相關(guān)轉(zhuǎn)換。
我想
將圖像src的像素值,然后保存為uchar?格式的數(shù)據(jù),因?yàn)閡char的取值范圍是(?0..255?)
在OpenCV中
Mat_對(duì)應(yīng)的是CV_8U,Mat_對(duì)應(yīng)的是CV_8U,Mat_對(duì)應(yīng)的是CV_8S,Mat_對(duì)應(yīng)的是CV_32S,Mat_對(duì)應(yīng)的是CV_32F,Mat_對(duì)應(yīng)的是CV_64F,對(duì)應(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語(yǔ)言中
char,類型識(shí)別符,字符型。
[signed]char?有符號(hào)字符型?長(zhǎng)度(字節(jié))為1?-128~127
unsigned char?無(wú)符號(hào)字符型?長(zhǎng)度(字節(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無(wú)符號(hào)數(shù)據(jù)類型,但可以輕而易舉的完成Unsigned轉(zhuǎn)換。
方案一:如果在Java中進(jìn)行流(Stream)數(shù)據(jù)處理,可以用DataInputStream類對(duì)Stream中的數(shù)據(jù)以Unsigned讀取。
Java在這方面提供了支持,可以用java.io.DataInputStream
類對(duì)象來(lái)完成對(duì)流內(nèi)數(shù)據(jù)的Unsigned讀取,該類提供了如下方法:
(1)int?readUnsignedByte
()?//從流中讀取一個(gè)0~255(0xFF)的單字節(jié)數(shù)據(jù),并以int數(shù)據(jù)類型的數(shù)據(jù)返回。返回的數(shù)據(jù)相當(dāng)于C/C++語(yǔ)言中所謂的“BYTE”。
(2)int readUnsignedShort ()?//從流中讀取一個(gè)0~65535(0xFFFF)的雙字節(jié)數(shù)據(jù),并以int數(shù)據(jù)類型的數(shù)據(jù)返回。返回的數(shù)據(jù)相當(dāng)于C/C++語(yǔ)言中所謂的“WORD”,
并且是以“低地址低字節(jié)”的方式返回的,所以程序員不需要額外的轉(zhuǎn)換。
方案二:利用Java位運(yùn)算符,完成Unsigned轉(zhuǎn)換。
正常情況下,Java提供的數(shù)據(jù)類型是有符號(hào)signed類型的,可以通過(guò)位運(yùn)算的方式得到它們相對(duì)應(yīng)的無(wú)符號(hào)值,參見(jiàn)幾個(gè)方法中的代碼:
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呢的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python re库函数_python
- 下一篇: java 泛型 get()_Java泛型