此功能程式碼不在 Net Server Demo 專案中,位於 System Demo (Src\SysDemoSource) 專案的 BoardList.cpp。
char str[100];
char sn[12+1];
m_list.DeleteAllItems();
boardCount = GetBoardCount();
for(UINT board = 0; board < boardCount; board++)
{
GetBoardDetail(board, &boardDetail);
for(UINT i = 0; i < 12; i++)
sn[i] = boardDetail.sn[i] + 0x30; // 轉換為 ASCII 字元
sn[12] = 0;
sprintf(str, "Board:%2u Type:%s, SN:%s", board, boardType[boardDetail.type], sn);
}
///
/// 取得板卡序號
///
/// 序號字串
public static string GetBoardSN()
{
uint boardCount = HikVisionSDK.GetBoardCount();
StringBuilder sn = new StringBuilder();
for (uint i = 0; i < boardCount; i++)
{
DS_BOARD_DETAIL boardDetail = new DS_BOARD_DETAIL();
HikVisionSDK.GetBoardDetail(i, ref boardDetail);
for (int j = 0; j < 12; j++)
{
// 注意:boardDetail.sn[j] 為 byte,需加 0x30 轉 ASCII 再轉 char
sn.Append((char)(boardDetail.sn[j] + 0x30));
}
break; // 僅取得第一張板卡序號,若需全部請移除 break
}
return sn.ToString();
}
ref:GetBoardDetail(i, ref boardDetail) 必須加 ref,否則無法取回填充的資料boardDetail.sn 為 12 位元組的原始資料,每位元組需 + 0x30 轉為可顯示的 ASCII 字元 (0-9, A-Z 等)break 只取第一張卡,實際專案建議移除並回傳 List<string> 支援多板卡伺服器端系列共三篇文章(第 8-10 篇),至此結束。接下來將進入 H.264 播放器 系列(第 11-13 篇)。感謝各位持續關注!
來自博客園網友分享,利用漢字機內碼直接指定 ushort 陣列元素即可顯示中文:
// 原始英文字串
new ushort[]{ 48, 16, 'H', 'I', 'K', 'V', 'I', 'S', 'I', 'O', 'N', '\0' };
// 替換為漢字「保」的機內碼 0xB1A3
new ushort[]{ 48, 16, 0xB1A3, 'I', 'K', 'V', 'I', 'S', 'I', 'O', 'N', '\0' };
原理:OSD 字元陣列支援雙位元組字元編碼,直接填入 Big5/GB2312 機內碼即可繪製中文。歡迎大家持續分享交流更多實用技巧!