VB.NET Byte 資料型別 筆記(基礎篇)
Byte 是 VB.NET 中用來保存小範圍非負整數的資料型別,範圍固定是 0 到 255。它適合表示色彩分量、裝置等級、小型代碼、位元旗標與原始位元資料。
Byte 的重點不是「數字比較小所以一定要用」,而是資料本質確實只有 0 到 255。若資料可能超過範圍,或會先進行加總、乘法、統計,通常應先用 Integer 承接運算結果,再確認是否能安全轉回 Byte。
先理解 Byte 的範圍
Byte:無符號整數型別,大小為 1 byte,也就是 8 位元。可保存的整數範圍是 0 到 255。
Byte 適合表示固定小範圍值
Byte 最大只能到 255,因此適合描述本來就被限制在這個範圍內的資料。例如 RGB 顏色值就是 0 到 255,這種資料使用 Byte 會很自然。
- 可用範圍:
0到255。 - 不可保存:負數、小數、超過 255 的整數。
- 預設值:若欄位未指定,數值預設為
0。 - 常見用途:RGB、位元旗標、資料封包、小型狀態碼。
| 項目 | 內容 | 實務意義 |
|---|---|---|
| 最小值 | Byte.MinValue = 0 |
不能保存負數。 |
| 最大值 | Byte.MaxValue = 255 |
輸入或運算結果不可超過 255。 |
| 大小 | 1 byte / 8 bits | 適合大量小範圍原始資料。 |
| 適合資料 | 固定小範圍整數。 | 色彩值、旗標、位元資料。 |
宣告與基本使用
基本宣告
Dim levelValue As Byte = 3
Dim brightness As Byte = 180
Dim maxByteValue As Byte = Byte.MaxValue
直接指定常數時,值必須落在 0 到 255 之間。若寫成 Dim value As Byte = 300,就超出 Byte 可保存範圍。
場景一:閱讀燈亮度等級
亮度值若設計成 0 到 255,Byte 就很適合表示目前亮度。這個範例將亮度值顯示在 Label 上。
需要的主控項
ButtonShowBrightness:顯示亮度。LabelBrightness:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonShowBrightness_Click(sender As Object, e As EventArgs) Handles ButtonShowBrightness.Click
Dim lampBrightness As Byte = 180
LabelBrightness.Text = "閱讀燈亮度:" & lampBrightness.ToString() & " / 255"
End Sub
End Class
邏輯解析
180落在 Byte 的合法範圍內。- 亮度上限若固定是 255,使用
Byte能清楚表達資料範圍。 - 若亮度需要小數或百分比計算,可另外使用其他型別處理顯示。
應用一:RGB 顏色分量
場景二:自訂公告底色
RGB 的紅、綠、藍三個分量都在 0 到 255 之間,因此很適合用 Byte 保存。這個範例用三個 Byte 值建立 Panel 背景色。
需要的主控項
ButtonApplyColor:套用顏色。PanelNotice:顯示顏色預覽。LabelColor:顯示 RGB 數值。
範例程式碼
Imports System.Drawing
Public Class Form1
Private Sub ButtonApplyColor_Click(sender As Object, e As EventArgs) Handles ButtonApplyColor.Click
Dim redValue As Byte = 255
Dim greenValue As Byte = 214
Dim blueValue As Byte = 120
PanelNotice.BackColor = Color.FromArgb(redValue, greenValue, blueValue)
LabelColor.Text = "RGB(" & redValue.ToString() & ", " &
greenValue.ToString() & ", " &
blueValue.ToString() & ")"
End Sub
End Class
邏輯解析
Color.FromArgb可接收 0 到 255 的色彩分量。Byte的範圍剛好符合 RGB 通道值。- 色彩值若來自 TextBox,仍需要先驗證輸入範圍。
應用二:文字輸入安全轉成 Byte
場景三:輸入音量值
TextBox 取得的內容一開始都是字串。若要轉成 Byte,建議先使用 Byte.TryParse,讓格式錯誤或範圍超出時能安全處理。
需要的主控項
TextBoxVolume:輸入音量值。ButtonSetVolume:設定音量。LabelVolume:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonSetVolume_Click(sender As Object, e As EventArgs) Handles ButtonSetVolume.Click
Dim volumeValue As Byte
If Not Byte.TryParse(TextBoxVolume.Text.Trim(), volumeValue) Then
LabelVolume.Text = "音量必須是 0 到 255 的整數"
Return
End If
LabelVolume.Text = "音量設定:" & volumeValue.ToString()
End Sub
End Class
邏輯解析
Byte.TryParse會同時檢查格式與 Byte 範圍。- 輸入
-1、300或非數字文字時,轉換會失敗。 - 表單輸入不適合直接用
CByte,因為錯誤輸入可能造成例外。
型別轉換與運算
場景四:兩個感測值平均
Byte 可以保存小範圍值,但運算時不一定適合一直留在 Byte。若需要加總、平均或乘法,建議先用 Integer 或 Decimal 承接中間結果。
需要的主控項
ButtonAverage:計算平均。LabelAverage:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonAverage_Click(sender As Object, e As EventArgs) Handles ButtonAverage.Click
Dim firstSignal As Byte = 210
Dim secondSignal As Byte = 240
Dim totalSignal As Integer = firstSignal + secondSignal
Dim averageSignal As Decimal = totalSignal / 2D
LabelAverage.Text = "平均感測值:" & averageSignal.ToString("N1")
End Sub
End Class
邏輯解析
- 單筆感測值適合用
Byte保存。 210 + 240的中間結果是450,已超過 Byte 上限。- 先用
Integer承接加總,可避免中間結果受 Byte 範圍限制。
| 轉換方向 | 風險 | 建議做法 |
|---|---|---|
| Byte → Integer | 風險低。 | 可直接指定。 |
| Integer → Byte | 可能超出 0 到 255。 | 先檢查範圍,再使用 CByte。 |
| String → Byte | 可能格式錯誤或超出範圍。 | 使用 Byte.TryParse。 |
應用三:位元旗標
場景五:檢查自助機功能開關
Byte 有 8 個位元,可用來保存多個開關狀態。每個旗標使用 1、2、4、8 這類數值,透過 Or 組合,透過 And 檢查。
需要的主控項
ButtonCheckFeature:檢查功能。LabelFeature:顯示結果。
範例程式碼
Public Class Form1
Private Const FeaturePrint As Byte = 1
Private Const FeatureScan As Byte = 2
Private Const FeaturePayCard As Byte = 4
Private Sub ButtonCheckFeature_Click(sender As Object, e As EventArgs) Handles ButtonCheckFeature.Click
Dim enabledFeatures As Byte = CByte(FeaturePrint Or FeaturePayCard)
Dim canPayByCard As Boolean = (enabledFeatures And FeaturePayCard) = FeaturePayCard
If canPayByCard Then
LabelFeature.Text = "功能狀態:支援刷卡付款"
Else
LabelFeature.Text = "功能狀態:不支援刷卡付款"
End If
End Sub
End Class
邏輯解析
FeaturePrint Or FeaturePayCard將兩個旗標組合起來。And FeaturePayCard用來檢查組合中是否包含刷卡功能。- 若旗標數量很多或需要更清楚的語意,可考慮使用
<Flags> Enum。
溢位與安全回存
Byte 最常見的錯誤
- 超過 255:例如輸入 300 或加總後變成 450。
- 出現負數:Byte 不能保存 -1。
- 直接轉型:未檢查範圍就使用
CByte,可能造成例外。 - 運算仍想回存 Byte:中間結果應先用較大範圍型別承接。
場景六:安全調整亮度值
這個範例先把 Byte 轉成 Integer 做加法,再檢查結果是否仍在 0 到 255。只有合法時才回存為 Byte。
需要的主控項
ButtonIncreaseLight:增加亮度。LabelLightResult:顯示結果。
範例程式碼
Public Class Form1
Private Sub ButtonIncreaseLight_Click(sender As Object, e As EventArgs) Handles ButtonIncreaseLight.Click
Dim currentLight As Byte = 230
Dim increaseValue As Integer = 40
Dim newValue As Integer = currentLight + increaseValue
If newValue > Byte.MaxValue Then
LabelLightResult.Text = "亮度調整失敗:超出 Byte 上限"
Return
End If
Dim safeLight As Byte = CByte(newValue)
LabelLightResult.Text = "新亮度:" & safeLight.ToString()
End Sub
End Class
邏輯解析
230 + 40的結果是270,超過Byte.MaxValue。- 中間結果用
Integer保存,避免直接回存 Byte 發生錯誤。 - 確認結果不超過 255 後,才適合使用
CByte轉回 Byte。
實務判斷與常見誤區
| 資料情境 | 適合 Byte | 不適合 Byte |
|---|---|---|
| 固定小範圍 | 0 到 255 的等級、色彩值、旗標值。 | 可能超過 255 的計數或總量。 |
| 是否可能負數 | 永遠不會是負數。 | 可能出現差額、溫度、位移等負值。 |
| 是否需要運算 | 單筆保存或簡單傳遞。 | 大量加總、平均、乘法,應先用較大型別。 |
| 輸入來源 | 已確認範圍的資料。 | 未驗證的 TextBox 或外部資料。 |
選型提醒:若只是一般數量,例如人數、頁數、訂單筆數,不需要刻意使用 Byte。除非資料本質明確限制在 0 到 255,否則 Integer 通常會更直覺。
重點整理
Byte是 0 到 255 的無符號整數型別。- Byte 不能保存負數,也不能保存超過 255 的值。
- RGB 色彩分量、位元旗標與小型代碼很適合使用 Byte。
- TextBox 輸入轉 Byte 時,建議使用
Byte.TryParse。 - Byte 轉成
Integer風險低,但Integer轉回 Byte 前要檢查範圍。 - 加總、平均、乘法等運算應先用較大範圍型別承接結果。
- 確認運算結果介於
Byte.MinValue與Byte.MaxValue後,才適合使用CByte回存。 - 若資料只是一般數量且沒有明確 0 到 255 限制,通常使用
Integer更合適。