C++结构体

typedef struct VidyoClientRequestGetWindowsAndDesktops_

{

/*! The number of application windows currently open */

VidyoSizeT numApplicationWindows;

/*! List of open application window names (UTF-8) (Localized) */

char appWindowName[MAX_NUM_APP_WINDOWS][MAX_URI_LEN];

/*! List of open application window application names (UTF-8) (Localized) */

char appWindowAppName[MAX_NUM_APP_WINDOWS][MAX_URI_LEN];

/*! List of open application window handles */

VidyoWindowCapturerWindowId appWindowId[MAX_NUM_APP_WINDOWS];

/*! List of open application window geometries */

VidyoRect appWindowRect[MAX_NUM_APP_WINDOWS];

/*! The number of system desktops currently available */

VidyoSizeT numSystemDesktops;

/*! List of available system desktop names (UTF-8) (Not localized) */

char sysDesktopName[MAX_SHARE_DISPLAY_DEVICE][MAX_URI_LEN];

/*! List of available system desktop handles */

VidyoWindowCapturerWindowId sysDesktopId[MAX_SHARE_DISPLAY_DEVICE];

/*! List of available system desktop geometries */

VidyoRect sysDesktopRect[MAX_SHARE_DISPLAY_DEVICE];

} VidyoClientRequestGetWindowsAndDesktops;

C# 翻译

[Serializable]

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]

unsafe public struct VidyoClientRequestGetWindowsAndDesktops

{

public uint numApplicationWindows;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS * MAX_URI_LEN)]

public byte[] appWindowName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS * MAX_URI_LEN)]

public byte[] appWindowAppName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS)]

public uint[] appWindowId;

[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = MAX_NUM_APP_WINDOWS)]

public VidyoRect[] appWindowRect;

public uint numSystemDesktops;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_SHARE_DISPLAY_DEVICE * MAX_URI_LEN)]

public byte[] sysDesktopName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_SHARE_DISPLAY_DEVICE)]

public uint[] sysDesktopId;

[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = MAX_SHARE_DISPLAY_DEVICE)]

public VidyoRect[] sysDesktopRect;

public string[] GetappWindowList()

{

int numApp = (int)(numApplicationWindows);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numApplicationWindows; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = appWindowName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

public string[] GetappWindowAppList()

{

int numApp = (int)(numApplicationWindows);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numApplicationWindows; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = appWindowAppName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

public string[] GetDesktopList()

{

int numApp = (int)(numSystemDesktops);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numSystemDesktops; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = sysDesktopName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

};

static public string UnicodeStringFromUtf8Array(byte[] bytUTF8)

{

byte[] bytUnicode = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, bytUTF8);

int cntUnicode = Encoding.Unicode.GetCharCount(bytUnicode);

char[] charUnicode = Encoding.Unicode.GetChars(bytUnicode);

int j = 0;

for (; j < cntUnicode; j++)

{

if (charUnicode[j] == 0)

break;

}

string strUnicode = Encoding.Unicode.GetString(bytUnicode, 0, j * 2);

return strUnicode;

}

C++/C#结构体转化-二维数组-bytes To Strings的更多相关文章

  1. C++/C#结构体转化-二维数组

    String To bytes typedef struct VidyoClientInEventGroupChat_ { /*! Message (contents) to be sent to a ...

  2. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  3. 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)

    一位数组: #include <stdio.h> #include<string.h> #define N 5 void luru(float s[],int n); void ...

  4. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

    全系列Index: [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一) [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二) [原创]只学到二维数组和结构体,不用链表也能 ...

  5. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  6. c动态分配结构体二维数组

    这个问题我纠结了蛮久了,因为前面一直忙(自己也懒了点),所以没有能好好研究这个.希望这篇文章能够帮助你们. #include <stdio.h> #include <stdlib.h ...

  7. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

    JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...

  8. js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  9. 二维数组转化为一维数组 contact 与apply 的结合

    将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...

随机推荐

  1. 关于ztree打开关闭所有节点,选中指定id节点

    var isOneByOneExpand=false;//是否递归展开 //展开节点 function expendNode(nodeId){ var node = treeObj.getNodeBy ...

  2. 配置自己风格的Clang-Format-Xcode

    在项目根目录下,创建一个文件.clang-format,使用vim打开并修改. 具体的配置风格可以看这里:http://clang.llvm.org/docs/ClangFormatStyleOpti ...

  3. JSF简单介绍

    JSF简单介绍 一. 什么是 JSF: JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架.它提供了一种以组件为中心来开发 Java Web 用户界 ...

  4. 自己主动更新--下载apk以及提示对话框的实现(3)

    下载apk以及提示对话框的实现 一.步骤: 1. 确定有能够更新的版本号,对话框提醒用户是否进行更新. 2. 选择更新的话,显示下载对话框而且进行下载.否则关闭提示更新对话框. 3. Apk下载完毕后 ...

  5. php mysql_insert_id() 获取为空

    mysql_insert_id() 获取插入数据后的最新的id 遇到问题和解决的步骤如下: 1. 使用后总是返回空的字符串,网上查了一番有人说是id要AUTO_INCREMENT,并且mysql_in ...

  6. prob5 of 140

    #include<stdio.h>int main(){ int n,i=1,j=1; double s=1,s1=0;; //scanf("%d",&n);  ...

  7. MySQL:ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

    MySQL在删除一张表时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fa ...

  8. js闭包陷阱问题

    JavaScript是一种非常强大的函数式编程语言,可以动态创建函数对象. 由于JavaScript还支持闭包(Closure),因此,函数可以引用其作用域外的变量,非常强大. 来看看在JavaScr ...

  9. inline-block代替浮动布局float:left列表布局最佳方案

    基于各位前辈的辛勤劳动,下面得出使用inline-block替换float:left;的最佳方案. html代码 <div class="list"> <ul&g ...

  10. mini-httpd源码分析-version.h

    /* version.h - version defines for mini_httpd */ #ifndef _VERSION_H_ #define _VERSION_H_ #define SER ...