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