2024年7月5日 星期五

19.VB.NET 筆記 基礎篇 - Byte

VB.NET Byte 數據類型筆記 (基礎篇)

VB.NET Byte 數據類型 筆記 (基礎篇)

Byte 數據類型就像是程式設計中的基本單位Byte 是最小的數據單位,就像是搭建程式的基礎材料,許多複雜的數據類型都是由 Byte 組成的。,大部分的數據類型都是以它為基礎構建的。透過了解 Byte 的特性和使用方式,就能夠更有效率地處理程式中的數據。

Byte 類型概述

Byte 類型定義:Byte 是 VB.NET 中的一種無符號整數無符號整數只能表示 0 和正整數,不能表示負數。類型,用於存儲範圍在 0 到 255 之間的整數值。它在內存中佔用 1 個位元組(8 位元)的空間。

下表列出了 Byte 類型的一些關鍵特性:

特性 說明
數值範圍 0 到 255
內存佔用 1 個位元組(8 位元)
預設值 0
常見用途 像素顏色、權限控制、簡單狀態等

Byte 類型雖然取值範圍有限,但在存儲數值範圍較小的數據時,能夠節省內存空間。

Byte 類型的宣告和賦值

宣告 Byte 類型變數的語法如下:

Dim variableName As Byte

其中,variableName 是變數的名稱。也可以在宣告的同時為變數賦予初始值:

Dim variableName As Byte = 10

Byte 類型的變數只能存儲 0 到 255 之間的整數值。如果嘗試給 Byte 變數賦予超出這個範圍的值,會導致編譯錯誤:

Dim value As Byte = 300 'Error: Constant expression not representable in type 'Byte'.

在編譯時,如果嘗試將一個超出 Byte 類型範圍的常數值直接賦值給 Byte 類型的變數,編譯器將報告一個錯誤,指出該常數值無法在 Byte 類型中表示。

Byte 類型的適用場景

1. 存儲像素顏色

在圖像處理中,每個像素的顏色通常用 RGB 三個分量表示,而每個分量的值範圍都在 0 到 255 之間。可以使用 Byte 類型來存儲這些分量值。以下示例演示了如何使用 Byte 類型來生成一個隨機色彩的圖像:

使用的控制項:
  • PictureBox1:用於顯示生成的隨機色彩圖像。
  • Button1:用於觸發生成新的隨機色彩圖像。
Imports System.Drawing 'PictureBox 這個控制項需要用到 System.Drawing 這個函式庫。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
        GenerateColorImage() '在表單載入時生成初始的隨機色彩圖像
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        GenerateColorImage() '點擊按鈕時生成新的隨機色彩圖像
    End Sub

    Private Sub GenerateColorImage()
        '創建一個 100x100 的 Bitmap 對象
        Dim bmp As New Bitmap(100, 100)
        
        '使用 Byte 類型生成隨機的 RGB 顏色值
        Dim rand As New Random()
        For x As Integer = 0 To bmp.Width - 1
            For y As Integer = 0 To bmp.Height - 1
                Dim r As Byte = rand.Next(0, 256) '隨機生成紅色分量
                Dim g As Byte = rand.Next(0, 256) '隨機生成綠色分量
                Dim b As Byte = rand.Next(0, 256) '隨機生成藍色分量
                
                '將隨機生成的 RGB 顏色值設置為像素的顏色
                bmp.SetPixel(x, y, Color.FromArgb(r, g, b))
            Next
        Next
        
        '在 PictureBox 中顯示生成的隨機色彩圖像
        PictureBox1.Image = bmp
    End Sub
End Class

在這個示例中,創建了一個 100x100 的 Bitmap 對象,並使用兩層嵌套的 For 循環遍歷圖像的每個像素。對於每個像素,使用 Byte 類型隨機生成了 RGB 三個顏色分量的值,然後通過 Color.FromArgb 方法創建顏色對象,並將其設置為當前像素的顏色。最後,將生成的 Bitmap 對象賦值給 PictureBox 控件,顯示出隨機色彩的圖像。

2. 存儲權限或狀態

在某些場景下,只需要表示有限的幾種狀態或權限。例如,文件的讀、寫、執行權限可以用 Byte 類型的不同位元來表示。以下示例演示了如何使用 Byte 類型來存儲和檢查文件權限:

使用的控制項:
  • Label1:用於顯示文件權限檢查的結果。
  • Button1:用於觸發文件權限檢查。
Public Class Form1
    Const PERMISSION_READ As Byte = 1 '讀取權限, 二進制 0000 0001
    Const PERMISSION_WRITE As Byte = 2 '寫入權限, 二進制 0000 0010
    Const PERMISSION_EXECUTE As Byte = 4 '執行權限, 二進制 0000 0100
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '組合權限
        Dim filePermissions As Byte = PERMISSION_READ Or PERMISSION_WRITE '讀寫權限, 二進制 0000 0011
        
        '顯示初始的文件權限
        Label1.Text = "文件權限:讀取, 寫入"
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '獲取文件權限
        Dim filePermissions As Byte = PERMISSION_READ Or PERMISSION_WRITE
        
        '檢查是否有讀取權限
        If (filePermissions And PERMISSION_READ) = PERMISSION_READ Then
            Label1.Text &= vbNewLine & "有讀取權限"
        Else
            Label1.Text &= vbNewLine & "沒有讀取權限"
        End If
        
        '檢查是否有寫入權限
        If (filePermissions And PERMISSION_WRITE) = PERMISSION_WRITE Then
            Label1.Text &= vbNewLine & "有寫入權限"
        Else
            Label1.Text &= vbNewLine & "沒有寫入權限"
        End If
        
        '檢查是否有執行權限
        If (filePermissions And PERMISSION_EXECUTE) = PERMISSION_EXECUTE Then
            Label1.Text &= vbNewLine & "有執行權限"
        Else
            Label1.Text &= vbNewLine & "沒有執行權限"
        End If
    End Sub
End Class

在這個示例中,首先定義了三個常數來表示讀取、寫入和執行權限,並使用 Byte 類型的不同位元來表示它們。然後,在表單載入時,通過位運算組合了讀取和寫入權限,並將結果顯示在 Label 控件中。當點擊按鈕時,通過位運算檢查文件權限中是否包含讀取、寫入和執行權限,並將檢查結果顯示在 Label 控件中。

Byte 類型與其他類型的轉換

在某些情況下,需要在 Byte 類型和其他數值類型之間進行轉換。以下示例演示了如何進行這些轉換:

使用的控制項:
  • Label1:用於顯示類型轉換的結果。
  • Button1:用於觸發類型轉換。
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim byteValue As Byte = 100
        
        '將 Byte 隱式轉換為 Integer
        Dim intValue As Integer = byteValue
        Label1.Text = "Byte 轉換為 Integer:" & intValue
        
        '使用 CShort 將 Byte 顯式轉換為 Short
        Dim shortValue As Short = CShort(byteValue)
        Label1.Text &= vbNewLine & "Byte 轉換為 Short:" & shortValue
        
        '使用 CLng 將 Byte 顯式轉換為 Long
        Dim longValue As Long = CLng(byteValue)
        Label1.Text &= vbNewLine & "Byte 轉換為 Long:" & longValue
        
        '使用 CSng 將 Byte 顯式轉換為 Single
        Dim singleValue As Single = CSng(byteValue)
        Label1.Text &= vbNewLine & "Byte 轉換為 Single:" & singleValue
        
        '使用 CDbl 將 Byte 顯式轉換為 Double
        Dim doubleValue As Double = CDbl(byteValue)
        Label1.Text &= vbNewLine & "Byte 轉換為 Double:" & doubleValue
        
        '將其他類型轉換為 Byte
        Dim intToByte As Byte = CByte(intValue)
        Dim shortToByte As Byte = CByte(shortValue)
        Dim longToByte As Byte = CByte(longValue)
        Dim singleToByte As Byte = CByte(singleValue) '小數部分將被截斷
        Dim doubleToByte As Byte = CByte(doubleValue) '小數部分將被截斷
        
        Label1.Text &= vbNewLine & vbNewLine & "其他類型轉換為 Byte:"
        Label1.Text &= vbNewLine & "Integer 轉換為 Byte:" & intToByte
        Label1.Text &= vbNewLine & "Short 轉換為 Byte:" & shortToByte
        Label1.Text &= vbNewLine & "Long 轉換為 Byte:" & longToByte
        Label1.Text &= vbNewLine & "Single 轉換為 Byte:" & singleToByte
        Label1.Text &= vbNewLine & "Double 轉換為 Byte:" & doubleToByte
    End Sub
End Class

在這個示例中,首先將 Byte 類型的變數 byteValue 隱式轉換為 Integer 類型,並顯示轉換結果。然後,使用 CShortCLngCSngCDbl 函數將 byteValue 顯式轉換為 Short、Long、Single 和 Double 類型,並顯示轉換結果。

接下來,將其他數值類型的變數轉換為 Byte 類型,並顯示轉換結果。需要注意的是,將 Single 和 Double 類型轉換為 Byte 類型時,小數部分將被截斷,而不是四捨五入。

Byte 類型的溢位和顯式轉換

在對 Byte 類型進行運算或賦值時,如果結果超出了 Byte 類型的範圍(0 到 255),就會發生溢位。發生溢位時,結果將是原值除以 256 的餘數。以下示例演示了如何避免 Byte 類型的溢位問題:

使用的控制項:
  • Label1:用於顯示運算結果。
  • Button1:用於觸發運算。
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '溢位示例
        Dim byteValue As Byte = 200
        byteValue = byteValue + 100 '溢位,結果為 44
        Label1.Text = "溢位結果:" & byteValue
        
        '避免溢位示例
        Dim result As Integer = 200 + 100
        Dim newByteValue As Byte
        
        '檢查結果是否在 Byte 的合法範圍內
        If result >= 0 AndAlso result <= 255 Then
            newByteValue = CByte(result) '轉換為 Byte 類型
            Label1.Text &= vbNewLine & "合法的 Byte 值:" & newByteValue
        Else
            Label1.Text &= vbNewLine & "結果超出 Byte 類型的範圍"
        End If
    End Sub
End Class

在這個示例中,首先演示了 Byte 類型的溢位問題。當把 200 和 100 相加時,結果 300 超出了 Byte 類型的範圍,因此發生了溢位,結果變為 44(300 除以 256 的餘數)。

為了避免溢位,將運算結果先存儲在 Integer 類型的變數 result 中,然後檢查 result 是否在 Byte 類型的合法範圍內。如果在範圍內,就將 result 轉換為 Byte 類型;否則,顯示一條錯誤消息。