首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 視訊監控系列(十):伺服器端進階功能——驗證、畫質設定、字幕疊加、板卡序號(五)

     編輯:關於C語言

四、取得板卡序號 (Board Serial Number)

此功能程式碼不在 Net Server Demo 專案中,位於 System Demo (Src\SysDemoSource) 專案的 BoardList.cpp。

VC++ 原始實作

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);
}

C# 移植實作

/// 
/// 取得板卡序號
/// 
/// 序號字串
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();
}

關鍵技術點說明

  1. 結構體傳遞用 ref:GetBoardDetail(i, ref boardDetail) 必須加 ref,否則無法取回填充的資料
  2. 序號轉換邏輯:boardDetail.sn 為 12 位元組的原始資料,每位元組需 + 0x30 轉為可顯示的 ASCII 字元 (0-9, A-Z 等)
  3. 迴圈設計:範例中 break 只取第一張卡,實際專案建議移除並回傳 List<string> 支援多板卡

系列總結:伺服器端功能完結

伺服器端系列共三篇文章(第 8-10 篇),至此結束。接下來將進入 H.264 播放器 系列(第 11-13 篇)。感謝各位持續關注!


五、文章後期維護補充 (2010-10-09)

OSD 顯示中文漢字解決方案

來自博客園網友分享,利用漢字機內碼直接指定 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 機內碼即可繪製中文。歡迎大家持續分享交流更多實用技巧!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved