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. 从一个死锁看mysql innodb的锁机制

    背景及现象 线上生产环境在某些时候经常性的出现数据库操作死锁,导致业务人员无法进行操作.经过DBA的分析,是某一张表的insert操 作和delete操作发生了死锁.简单介绍下数据库的情况(因为涉及到 ...

  2. Proud Merchants(01背包)

    Proud Merchants Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

  3. Python 随即生成DAG(有向无环图)

    给校队选拔赛出了道DAG上的背包问题,需要生成DAG数据. 最开始使用的方法是先随机生成再判环,如果有环就重新生成.这种方法得到DAG的概率随着点数和边数的增加而急速降低,为了一个DAG要生成很多次, ...

  4. django中怎样生成非HTML格式的内容。

    某些时候可能有这种需求.在网页中点击一个链接或者一个button希望返回一张图片.一个pdf文档.一个csv文档等而非HTML. 在diango中非常easy做到这些.django中的view用来接收 ...

  5. windows如何获取Win10 Win8 Win8.1版本

    GetVersionEx 在win8 win8.1 win10 之后已经无法使用,如果非要使用的话需要让exe嵌入manifest,mainfest如下.这个文件需要已utf-8存储. <?xm ...

  6. 《CSAPP》读书杂记 - Chapter 2. Representing and Manipulating Information

    1. 一段查看地址内容的代码 代码: #include <stdio.h> typedef unsigned char *byte_pointer; void show_bytes(byt ...

  7. shared_ptr智能指针源码剖析

    (shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档 (http://www.boost.org/doc/ ...

  8. Application Loader下载安装和上传IOS app程序

    如果您安装了最新版的XCode开发环境.对于在4.2及以上版本,Developer/Applications/Utilities目录中已经有ApplicationLoader程序,无需执行以下单独安装 ...

  9. The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the arguments (int, SettingFragment, String)

    The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the ...

  10. Ksoap 使用简介

    转:http://www.open-open.com/bbs/view/1320111271749?sort=newest WebService 是一种基于SOAP协议的远程调用标准.通过WebSer ...