vba中生成数组的[ ]与array 转

vba中生成数组的[ ]与array 转
vba中生成数组的[ ]与array 转

vba中生成数组的[ ]与array 转

看一贴中问[ ]与array,在此简说下:

一、array

是返回一个一维数组,其最小下标受Option Base 语句指定的下界的决定是0还是1(但vba.array不受此限定)示例:a =Array(1, 2, 3, 4) '在Option Base 0或默认情况下,a是个最小下标为0的一维数组

a =Array(1, 2, 3, 4) '在Option Base 1情况下,a是个最小下标为1的一维数组

a =vba.Array(1, 2, 3, 4) '不管Option Base指定的是什么,a都是个最小下标为0的一维数组

如果要用array返回一个二维数组,得先生成一个数组元素为数组的一维数组然后再转一转,如:

a = Application.Transpose(Array(Array(1, 2), Array(3, 4))) 'a是一个二维数组,但注意他的元素顺序

其中Array(Array(1, 2), Array(3, 4))产生的就是一个数组元素为数组的一维数组

二、[ ]

功能与evaluate差不多(evaluate可以用变量,而[ ]不能)。他也可以返回数组,但与array不同的是:最小下标不受Option Base 语句指定的下界的决定,都是1;不但可以返回

一维数组也可以返回二维数组。如下示例:

a = [{1,2,3,4}] 'a是一个最小下标为1的一维数组

a = [{1,2;3,4}] 'a是一个二维数组,是不是比array要方便一些?但注意其元素的顺序与前面的不同哈

同时,他还可以进行些计算,如

a = [{1,2;3,4}+5] '可以这样,可以去看看结果中各元素是怎样的

a = [{1,2;3,4}&"可以"] '这样也行

a = [{1,2;3,4}&{"a","b";"c","d"}] '同样这样还是可以

这是不是就是与单元格中输入公式并选中一些地方后按F9所看到的差不多?

它除了与数组而外,还有:

MsgBox [sum(a1:b4)] '假设当前表的a1:b4中为数字,这样就求和了

MsgBox Evaluate("sum(a1:b4)")、MsgBox WorksheetFunction.Sum(Range("a1:b4"))

功能都是一样的,只是写起来是不是简单多了?但快不快就不晓得哈

总之,就一句话:在单元格中可以怎样整的在VBA中就用[ ]怎样整就成了但此贴不是鼓吹使用[ ]而不用array哈,各有千秋嘛。哈哈

VBA语法

VBA语法技巧 数据类型 “数据类型”是指如何将数据存储在内存中。(1)Boolean 表示逻辑数据,可以是True或False中的任一个值。占用2字节的存储空间,取值范围为True 或False,缺省值为False。 (2)Byte 只能表示正数。占用1字节的存储空间,取值范围为0-255,缺省值为0。 (3)Currency 一种保存货币值数据的特殊数字格式。占用8字节的存储空间,取值范围为-922337203685477.5808-922337203685477.580 7,缺省值为0。 (4)Date 一种用于表示日期或时间的专用格式。占用8字节的存储空间,取值范围为100年1月1日——9999年12月31日,缺省值为00:00:00。 (5)Decimal 一种包含以10的幂为刻度的十进制数的变体子类型,只能通过CDec转换函数创建,不是一种独立的数据类型。占用14字节的存储空间,取值范围为 ±79228162514264337593543950335(不带小数点)或±7.9228162514264337593543950335(带28位小数点),缺省值为0。 (Decimal数据类型是在Excel 2000中引入的,在以前的版本中不能使用这种数据类型。该数据类型非常特殊,因为不能实际声明它,它是Variant的子类型,必须使用CDec函数将一个变量转换为Decimal数据类型) (6)Double 存储双精度浮点数,占用8字节的存储空间,取值范围为负值: -1.79769313486232E308——4.94065645841247 E-324,正值: 1.79769313486232E308——4.94065645841247E -324,缺省值为0。 (7)Integer 表示从-32768-32767之间的整数,其中一位表示符号,占用2字节的存储空间,缺省值为0。 (8)Long 表示存储为4个字节空间的带符号的数,其中一位表示符号,取值范围为 -2147483648-2147483647,缺省值为0。 (9)Object 包含对某个对象的引用(地址),占用4字节的存储空间,可对任何对象引用,缺省值为Nothing。 (10)Single 表示分数、带小数位或指数的数值等单精度数,占用4字节的存储空间,取值范围为负值: -3.402823E38——1.401298E-45,正值: 1.401298E-45——3.402823E38,缺省值为0。 (11)String 可声明定长和变长的String数据类型。其中,定长的String数据类型占用的存储空间为字符串的长度,取值范围为1——65400个字符,缺省值等于该字符串长度的空格数。变长的 String数据类型能动态地加长或缩短以存储要求的字符串数,占用的存储空间为10字节加上

图片与字节数组相互转换的方法

图片与字节数组相互转换的方法 图片与字节数组相互转换的方法 aspx.cs   using System;using System.IO; using System.Drawing; using System.Drawing.Imaging;public partial class _2Stream : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {}protected void FileToStream(object sender, EventArgs e) { //将JPG图片转化成字节数组 Image image = Image.FromFile("E:/1.jpg"); //或者使用Server.MapPath MemoryStream ms =

new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); byte[] buffer = new byte[ms.Length]; ms.Read(buffer, 0, (int)ms.Length);//遍历字节数组 for (int i = 0; i < buffer.LongLength; i++) { message.Text += buffer[i].ToString(); }//将字节数组转化成图像文件(自定义格式)并保存MemoryStream ms2 = new MemoryStream(buffer, 0, buffer.Length); ms2.Seek(0, SeekOrigin.Begin); Image image2 = Image.FromStream(ms2); image2.Save("E:\\2.gif", ImageFormat.Gif);

Excel VBA编程 数组函数

Excel VBA编程数组函数 在程序中,根据实际情况,需要判断某个变量是否为数组,或者数组的下标范围,可以使用系统提供的函数来进行这些操作。下面分别介绍这些函数。 1.检测数组下标 利用Lbound与Ubound函数,可以返回指定数组中的最小或最大下标,即数组中的最小值和最大值。 格式:Lbound/Ubound(<数组名>[,<数组维序号>]) 函数值为数组某维的下界(Lbound)或上界(Ubound),类型为Long,其中数组维序号为可选项,表示数组的指定维号,默认为1。 例如,显示数组中的数组元素,如图5-14所示。 显示 图5-14 显示的结果 其代码如下: Sub 显示数组() Dim A(-1 To 50, 10 To 30, -13 To 4, -5 To 15) '显示最小下标 Debug.Print "第一维数组最小下标:" & LBound(A, 1) Debug.Print "第二维数组最小下标:" & LBound(A, 2) Debug.Print "第三维数组最小下标:" & LBound(A, 3) Debug.Print "第四维数组最小下标:" & LBound(A, 4) '显示最大下标 Debug.Print "第一维数组最大下标:" & UBound(A, 1) Debug.Print "第二维数组最大下标:" & UBound(A, 2) Debug.Print "第三维数组最大下标:" & UBound(A, 3) Debug.Print "第四维数组最大下标:" & UBound(A, 4) End Sub 2.判断数组 在实际应用中,数组和变量的区分不是很清晰,特别是定义的动态数组和变量更加难以区分。为此VBA提供了isarray函数来判断是否是数组。 格式:isarray(变量名) 其值为逻辑型,指出指定的变量是否为一个数组.是则值为true,否则为false。 例如,声明数组s和变量a,b,判断其是否数组,其代码如图5-15所示。

java整型数与网络字节序的 byte[] 数组转换关系

java整型数与网络字节序的byte[] 数组转换关系 工作项目需要在java和c/c++之间进行socket通信,socket通信是以字节流或者字节包进行的,socket发送方须将数据转换为字节流或者字节包,而接收方则将字节流和字节包再转换回相应的数据类型。如果发送方和接收方都是同种语言,则一般只涉及到字节序的调整。而对于java和c/c++的通信,则情况就要复杂一些,主要是因为java中没有unsigned类型,并且java和c在某些数据类型上的长度不一致。 本文就是针对这种情况,整理了java数据类型和网络字节流或字节包(相当于java的byte 数组)之间转换方法。实际上网上这方面的资料不少,但往往不全,甚至有些有错误,于是就花了点时间对java整型数和网络字节序的byte[]之间转换的各种情况做了一些验证和整理。整理出来的函数如下: public class ByteConvert { // 以下是整型数和网络字节序的byte[] 数组之间的转换 public static byte[] longToBytes(long n) { byte[] b = new byte[8]; b[7] = (byte) (n & 0xff); b[6] = (byte) (n >> 8 & 0xff); b[5] = (byte) (n >> 16 & 0xff); b[4] = (byte) (n >> 24 & 0xff); b[3] = (byte) (n >> 32 & 0xff); b[2] = (byte) (n >> 40 & 0xff); b[1] = (byte) (n >> 48 & 0xff); b[0] = (byte) (n >> 56 & 0xff); return b; } public static void longT oBytes( long n, byte[] array, int offset ){ array[7+offset] = (byte) (n & 0xff); array[6+offset] = (byte) (n >> 8 & 0xff); array[5+offset] = (byte) (n >> 16 & 0xff); array[4+offset] = (byte) (n >> 24 & 0xff); array[3+offset] = (byte) (n >> 32 & 0xff); array[2+offset] = (byte) (n >> 40 & 0xff); array[1+offset] = (byte) (n >> 48 & 0xff); array[0+offset] = (byte) (n >> 56 & 0xff); } public static long bytesToLong( byte[] array ) { return ((((long) array[ 0] & 0xff) << 56) | (((long) array[ 1] & 0xff) << 48)

C#数组、字节数组、转换等

C#数组、字节数组、转换等 在System名称空间里面有许多跟Array操作相关的类。其中System.Array 类里面就提供了以下常用的方法: BinarySearch: 使用二进制搜索算法在一维的排序Array中搜索值。 Copy: 将一个Array的一部分元素复制到另一个Array中,并根据需要执行类型强制转换和装箱。 CopyTo: 将当前一维Array的所有元素复制到指定的一维Array中。 Resize: 将数组的大小更改为指定的新大小。 Sort: 对一维Array对象中的元素进行排序。 与大多数类不同,Array提供CreateInstance方法,以便允许后期绑定访问,而不是提供公共构造函数。 Array.Copy方法不仅可在同一类型的数组之间复制元素,而且可在不同类型的标准数组之间复制元素;它会自动处理强制类型转换。有些方法,如CreateInstance、Copy、CopyTo、GetValue和SetValue,提供重载(接受64位整数作为参数),以适应大容量数组。LongLength和GetLongLength返回指示数组长度的64位整数。在执行需要对Array进行排序的操作(如BinarySearch)之前,必须对Array进行排序。

ArrayList跟Array不同,前者是集合对象,ArrayList的ToArray方法可以直接将ArrayList里面的全部元素导出到一个数组里,而不需用循环逐个元素地复制到一个数组。 ToArray的使用方法如下: ArrayList ay = new ArrayList(); ay.Add("sheep"); ay.Add("cat"); ay.Add("dog"); string[] al= (string[])ay.ToArray(typeof(string)); Console.WriteLine(al[0]); 关键的地方在于ToArray的参数,这里应该用反射中的typeof获取arraylist 里面元素的原始数据类型。 在数组中有一种比较特殊的: 字节数组,即byte[]。内存、文件中的数据都是以字节数组的形式储存的,如果程序需要对数据进行操作的话,或多或少都会使用到byte[]。 对于byte[]跟其他类型的相互转换问题,在C++中,使用Memorycopy函数即可完成,虽然在C#里面也有类似MemoryCopy的函数: Buffer.BlockCopy,但由于强类型的特性,在C#里它并实现不了字节数组跟其他类型转换的功能。 为了解决这个问题,需要手工写将其他类型的数据通过位运算和逻辑运算而得到字节数组。如下面的代码: //整型转换为字节数组 int i = ; //对应的十六进制是:0012D687

byte数组转化成16进制字符串用法分析

byte数组转化成16进制字符串,C#中的overload,overwrite,override的区别 C++ 实现Single Sever Simulation AFNetworking 更改请求时间iOS chrome插件,二维码自动生成,C编程方式进行控制台输入 maven jar shade assembly配置[XML] Maven pom.xml public: double angle; QPen ang_info_pen; }; #endif [文件] MainWindow.cpp ~ 28KB [文件] MainWindow.h ~ 3KB //AngularJS 绑定鼠标左键、右键单击事件 //API权限设计总结系统sign验证规则 //Apriopri算法的简单实现 #ifndef __MAINWINDOW_H__ #define __MAINWINDOW_H__ #include "ui_MainWindow.h" #include "Shape.h" #include class CDockWin; class CDrawWin:public QMainWindow, public Ui_Mainwin { Q_OBJECT public: CDrawWin(QWidget *parent = NULL); // 画图状态定义 enum DRAW_STATUS{ // 无画图状态 DRAW_STATUS_NONE = 0, // 绘画当中 DRAW_STATUS_DRAWING, // 移动 DRAW_STATUS_DRAG, // 改变图元 DRAW_STATUS_CHANGE }; // 当前的菜单选择 enum MENU_STATUS{

VBA数组进阶

VBA 数组进阶 ————进阶即为进阶即为进阶即为探寻探寻探寻细节细节细节,,“实践出真知实践出真知”” 。 此篇献给探索VBA 和所有关心我们地球家园的朋友们! 此篇版权归https://www.360docs.net/doc/5e14404679.html, 和https://www.360docs.net/doc/5e14404679.html, 网站 欢迎大家转载,但请保留出处 HOmT398 2009.4.18于北京

一、数组数组基本概念基本概念基本概念 1、 什么是数组什么是数组 数组是一组数。 数组是一组有序列的数。 数组是一组连续可索引的具有相同内在数据类型的元素所成的集合,在未指定为变体变量情况下。 2、 上界上界、、下界下界和下标和下标和下标 上界:数组某一维可用的最大下标。用Ubound 函数表示。 下界:数组某一维的最小下标。默认最小下标为0。用Lbound 函数表示。 下标;数组某一维的元素个数。 3、 调试数组方法调试数组方法::本地窗口本地窗口 4、 静态数组静态数组、、动态数组动态数组和多维数组和多维数组和多维数组 静态数组 静态数组:在定义数组时就确定维数和上下界的数组。如,Dim arrTemp(5) As Integer 动态数组 动态数组:在定义数组时未确定维数和上下界的数组。如,Dim arrTemp() As String 注意,在定义动态数组之后,必须使用ReDim 语句来设置动态数组的维数、上界和下界,为数组重新分配存储空间。否则,将出现运行错误,提示下标越界。 Sub test() Dim arrTemp(5) As Integer Stop End Sub Sub test() Dim arrTemp() As Integer

字符串和字符数组之间的转换

字符串和字符数组之间的转换 2010-11-02 16:53:00| 分类: |举报|字号订阅 字符串类提供了一个void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例: private void TestStringChars() { string str = "mytest"; char[] chars = (); = ""; "Length of \"mytest\" is " + + "\n"); "Length of char array is " + + "\n"); "char[2] = " + chars[2] + "\n"); } 例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下: Length of "mytest" is 6 Length of char array is 6 char[2] = t 可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢? 我们可以使用类的构造函数来解决这个问题。类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例, 在 TestStringChars() 函数中输入如下语句: char[] tcs = {'t', 'e', 's', 't', ' ', 'm', 'e'}; string tstr = new String(tcs); "tstr = \"" + tstr + "\"\n"); 运行结果输入 tstr = "test me",测试说明转换成功。 实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们

Excel VBA数组基础

Excel VBA数组基础 数组为可以存储多个数据的变量。 声明数组 Dim myArray(2) 声明一个含有3个元素的数组,即myArray(0)、myArray(1)、myArray(2) Option Base 1 Dim myArray(2) As Integer 声明一个含有2个元素的数组,即myArray(1)、myArray(2),数据类型为Integer型。Option Base语句用来改变数组的下界,指定数组基数从1开始。 Dim myArray(1 To 10) 声明一个含有10个元素的数组,数组基数从1开始。这是另一种改变数组下界的方法,即在定义数组的同时,指定数组的上界和下界。 Dim myArray(1 To 10, 1 To 20) 声明一个10行20列的数组。 获取数组的下界和上界 LBound函数:获取数组的下界 UBound函数:获取数组的上界 说明: ●UBound函数返回数组的上界,数组中实际的元素个数取决于其下界。如果使用缺 省下界值0,UBound函数返回的值比数组实际元素个数小1。例如,如果数组变量 myArray有10个元素且下界为0,那么UBound(myArray)返回值为9,因此数组中 元素的总数应为:UBound(myArray)+1 如果下界设置为1,那么UBound函数的返回值就等于数组的实际元素数。 因此,在确定数组元素个数时,要同时使用UBound函数和LBound函数才能确保 结果正确: UBound(myArray)-LBound(myArray)+1 ●在使用UBound函数之前,数组应该初始化,否则会导致“下标越界”错误。 ●可以对多维数组使用UBound函数,但需要指定数组中的一个维数。若不指定维数, 默认为第1维。 上界:UBound(myArray,dimensionNo) 下界:LBound(myArray,dimensionNo) 给数组赋值

inputStream和String,Byte之间的转换

1.import java.io.ByteArrayInputStream; 2.import java.io.ByteArrayOutputStream; 3.import java.io.IOException; 4.import java.io.InputStream; 5. 6./** 7. * 8. * @author Andy.Chen 9. * @mail Chenjunjun.ZJ@https://www.360docs.net/doc/5e14404679.html, 10. * 11. */ 12.public class InputStreamUtils { 13. 14. final static int BUFFER_SIZE = 4096; 15. 16. /** 17. * 将InputStream转换成String 18. * @param in InputStream 19. * @return String 20. * @throws Exception 21. * 22. */ 23. public static String InputStreamTOString(InputStream in) throws Ex ception{ 24. 25. ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 26. byte[] data = new byte[BUFFER_SIZE]; 27. int count = -1; 28. while((count = in.read(data,0,BUFFER_SIZE)) != -1) 29. outStream.write(data, 0, count); 30. 31.data = null; 32. return new String(outStream.toByteArray(),"ISO-8859-1"); 33. } 34. 35. /** 36. * 将InputStream转换成某种字符编码的String 37. * @param in 38. * @param encoding 39. * @return 40. * @throws Exception 41. */

如何在vba中声明数组

声明数组 什么是数组:连续可索引的具有相同内在数据类型的元素所成的集合,数组中的每一元素具有唯一索引号。更改其中一个元素并不会影响其它元素。 数组的声明方式和其它的变量是一样的,它可以使用Dim、Static、Private 或Public 语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。数组是否从0 或 1 索引是根据Option Base 语句的设置。如果Option Base 没有指定为 1,则数组索引从零开始。 声明固定大小的数组 下面这行代码声明了一个固定大小的数组,它是个11 行乘以11 列的Integer 数组: Dim MyArray(10, 10) As Integer 第一个参数代表的是行;而第二个参数代表的是列。 与其它变量的声明一样,除非指定一个数据类型给数组,否则声明数组中元素的数据类型(数据类型:变量的特性,用来决定可保存何种数据。数据类型包括Byte、Boolean、Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant ( 默认) 和用户定义类型等。)为Variant。数组中每个数组的数字型Variant 元素占用16 个字节。每个字符串型Variant 元素占用22 个字节。为了尽可能使写的代码简洁明了,则要明确声明的数组为某一种数据类型而非Variant。下面的这几行代码比较了几个不同数组的大小: ' 整型数组使用22 个字节(11 元素* 2 字节) ReDim MyIntegerArray(10) As Integer ' 双精度数组使用88 个字节(11 元素* 8 字节)。 ReDim MyDoubleArray(10) As Double ' 变体型数组至少使用176 字节(11 元素* 16 字节)。 ReDim MyVariantArray(10) ' 整型数组使用100 * 100 * 2 字节(20,000 字节)。 ReDim MyIntegerArray (99, 99) As Integer ' 双精度数组使用100 * 100 * 8 字节(80,000 字节)。 ReDim MyDoubleArray (99, 99) As Double ' 变体型数组至少使用160,000 字节(100 * 100 * 16 字节)。 ReDim MyVariantArray(99, 99) 数组变量的最大值,是以的操作系统与有多少可用内存为基础。若使用的数组大小超过了系统中可用内存总数的话,则速度会变慢,因为必须从磁盘中读写回数据。 声明动态数组 若声明为动态数组,则可以在执行代码时去改变数组大小。可以利用Static、Dim、Private 或Public 语句来声明数组,并使括号内为为空,如下示例所示。 Dim sngArray() As Single

short,int,long与byte数组之间的转换

1. 2.package com.test; 3. 4.import java.nio.ByteBuffer; 5. 6.public class ByteUtil { 7. 8./** 9. * @param args 10. */ 11. public static void main(String[] args) { 12. test2(); 13. } 14. public static void test2() 15. { 16. short s = -20; 17. byte[] b = new byte[2]; 18. putReverseBytesShort(b, s, 0); 19. ByteBuffer buf = ByteBuffer.allocate(2); 20. buf.put(b); 21. buf.flip(); 22. System.out.println(getReverseBytesShort(b, 0)); 23. System.out.println(Short.reverseBytes(buf.getShort())); 24. System.out.println("***************************"); 25. int i = -40; 26. b = new byte[4]; 27. putReverseBytesInt(b, i, 0); 28. buf = ByteBuffer.allocate(4); 29. buf.put(b); 30. buf.flip(); 31. System.out.println(getReverseBytesInt(b, 0)); 32. System.out.println(Integer.reverseBytes(buf.getInt())); 33. System.out.println("***************************"); 34. long l = -50; 35. b = new byte[8]; 36. putReverseBytesLong(b, l, 0); 37. buf = ByteBuffer.allocate(8); 38. buf.put(b); 39. buf.flip(); 40. System.out.println(getReverseBytesLong(b, 0)); 41. System.out.println(Long.reverseBytes(buf.getLong())); 42. System.out.println("***************************"); 43. } 44. public static void test1()

JAVA二进制字节数组字符十六进制BCD编码转换

JAVA二进制字节数组字符十六进制BCD编码转换; import java.io.*; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class DataConverter { /* 把16进制字符串转换成字节数组 * @param hex * @return */ public static byte[] hexStringToByte(String hex) { int len = (hex.length() / 2); byte[] result = new byte[len]; char[] achar = hex.toCharArray(); for (int i = 0; i < len; i++) { int pos = i * 2; result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1])); } return result; } private static byte toByte(char c) { byte b = (byte) "0123456789ABCDEF".indexOf(c); return b; } /** *//** * 把字节数组转换成16进制字符串 * @param bArray * @return */ public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); }

JAVA里面关于byte数组和String之间的转换问题

JAVA里面关于byte数组和String之间的转换问题把byte转化成string,必须经过编码。 例如下面一个例子: import java.io.UnsupportedEncodingException; public class test{ public static void main(String g[]) { String s = "12345abcd"; byte b[] = s.getBytes(); String t = b.toString(); System.out.println(t); } } 输出字符串的结果和字符串s不一样了. 经过以下方式转码就可以正确转换了: public class test{ public static void main(String g[]) { String s = "12345abcd"; byte b[] = s.getBytes(); try { String t = new String(b); System.out.print(t); } catch (Exception e) { e.printStackTrace(); } } } String str = "String"; byte[] byte1 = str.getBytes(); String str1 = new String(byte1); byte[] byte2 = str1.getBytes(); String str2 = new String(byte2); System.out.println("str<<<" + str); System.out.println("byte1<<<" + byte1); System.out.println("str1<<<" + str1); System.out.println("byte2<<<" + byte2); System.out.println("str2<<<" + str2); ------------------------------------- 输出结果 str<<

VBA中的控件数组

VBA中的控件数组 2009年2月28日 评论发表评论 大家都知道,和VB不一样,VBA中不能直接创建控件数组。然而可以使用WithEvents来模拟相同的功能。我们需要一个类来处理控件的事件,而每一个控件需要一个类实例。对于不同控件的类实例,我们可以使用一个对象数组或者集合来实现。 这里使用按钮控件做为例子来介绍怎样在窗体和工作表中创建控件数组。 创建类 创建控件数组之前,我们需要一个类来处理控件的事件。 在VBE窗口中,单击菜单“插入”->“类模块”,在属性窗口中将类的名称改为“cCB”。 在类模块中添加下面这一行: Private WithEvents m_CB As https://www.360docs.net/doc/5e14404679.html,mandButton 这样你就可以从代码栏的顶部左边下拉列表中选择m_CB并选择右边下拉列表中相应的事件。 完整的代码如下: Private WithEvents m_CB As https://www.360docs.net/doc/5e14404679.html,mandButton ' 初始化,将控件绑定到类 Public Sub Init(ctl As https://www.360docs.net/doc/5e14404679.html,mandButton) Set m_CB = ctl End Sub ' 控件的Click事件 Private Sub m_CB_Click() MsgBox "你点击了:" & m_CB.Caption End Sub ' 注销类 Private Sub Class_Terminate() Set m_CB = Nothing End Sub

窗体中的控件数组 然后创建一个窗体,在窗体中添加两个CommandButton,将这两个按钮控件分别命名为cmd1和cmd2,然后在窗体中的初始化事件中添加代码如下: Private ctlCB(1 To 2) As cCB ' 以对象数组保存类的实例 Private Sub UserForm_Initialize() Set ctlCB(1) = New cCB ' 将按钮cmd1赋给类的实例 ctlCB(1).Init cmd1 Set ctlCB(2) = New cCB ctlCB(2).Init cmd2 End Sub 这里使用对象数组ctlCB(1 to 2)来保存类实例。每当使用Set语句创建一个类实例,然后使用类的Init方法将按钮控件赋给这个实例。 也可以使用集合来保存这个类的实例。代码如下: Private colCB As New Collection Private ctlCB As cCB … 以集合保存类的实例 Private Sub UserForm_Initialize() Set ctlCB = New cCB ' 将按钮cmd1赋给类的实例 ctlCB.Init cmd1 ' 将类的实例加入到集合中 colCB.Add ctlCB Set ctlCB = New cCB ctlCB.Init cmd2 colCB.Add ctlCB End Sub

C#中将byte数组转换为8bit灰度图像

类似的文章在网上可以看到不少,但多多少少都存在一些问题。这两天做实验室的项目用到这个功能,我从头把它整理了一遍。 在看代码之前,首先解释几个问题。 byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的时候,一个数组元素就是一个像素的灰度值。仅有这个数组还不足以恢复出原来的图像,还必须事先知道图像的长、宽值; 创建Bitmap类的时候必须指定PixelFormat为Format8bppIndexed,这样才最符合图像本身的特性; Bitmap类虽然提供了GetPixel()、SetPixel()这样的方法,但我们绝对不能用这两个方法来进行大规模的像素读写,因为它们的性能实在很囧; 托管代码中,能不用unsafe就尽量不用。在.NET 2.0中已经提供了BitmapData类及其LockBits()、UnLockBits()操作,能够安全地进行内存读写; 图像的width和它存储时的stride是不一样的。位图的扫描线宽度一定是4的倍数,因此图像在内存中的大小并不是它的显示大小; Format8bppIndexed类型的PixelFormat是索引格式,其调色板并不是灰度的而是伪彩,因此需要我们对其加以修改。 代码如下,解说写在注释里了: 1 ///

2 /// 将一个字节数组转换为8bit灰度位图 3 /// 4 /// 显示字节数组 5 /// 图像宽度 6 /// 图像高度 7 /// 位图 8 public static Bitmap ToGrayBitmap(byte[] rawValues, int width, int height) 9 { 10 //// 申请目标位图的变量,并将其内存区域锁定 11 Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed); 12 BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), 13 ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); 14 15 //// 获取图像参数

javascript字节数组转换为16进制

javascript字节数组转换为16进制/** * byte数组转换成16进制字符串 * @param src * @return */ bytesToHexString(byte[] src){ public static String StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * 根据文件流读取图片文件真实类型 * @param is

* @return */ public static String getTypeByStream(FileInputStream is){ byte[] b = new byte[4]; try { is.read(b, 0, b.length); } catch (IOException e) { e.printStackTrace(); } String type = bytesToHexString(b).toUpperCase(); if(type.contains("FFD8FF")){ return "jpg"; }else if(type.contains("89504E47")){ return "png"; }else if(type.contains("47494638")){ return "gif"; }else if(type.contains("49492A00")){ return "tif"; }else if(type.contains("424D")){ return "bmp"; } return type; } public static void main(String[] args) throws Exception {

vba中生成数组的[ ]与array 转

vba中生成数组的[ ]与array 转 看一贴中问[ ]与array,在此简说下: 一、array 是返回一个一维数组,其最小下标受Option Base 语句指定的下界的决定是0还是1(但vba.array不受此限定)示例:a =Array(1, 2, 3, 4) '在Option Base 0或默认情况下,a是个最小下标为0的一维数组 a =Array(1, 2, 3, 4) '在Option Base 1情况下,a是个最小下标为1的一维数组 a =vba.Array(1, 2, 3, 4) '不管Option Base指定的是什么,a都是个最小下标为0的一维数组 如果要用array返回一个二维数组,得先生成一个数组元素为数组的一维数组然后再转一转,如: a = Application.Transpose(Array(Array(1, 2), Array(3, 4))) 'a是一个二维数组,但注意他的元素顺序 其中Array(Array(1, 2), Array(3, 4))产生的就是一个数组元素为数组的一维数组 二、[ ] 功能与evaluate差不多(evaluate可以用变量,而[ ]不能)。他也可以返回数组,但与array不同的是:最小下标不受Option Base 语句指定的下界的决定,都是1;不但可以返回

一维数组也可以返回二维数组。如下示例: a = [{1,2,3,4}] 'a是一个最小下标为1的一维数组 a = [{1,2;3,4}] 'a是一个二维数组,是不是比array要方便一些?但注意其元素的顺序与前面的不同哈 同时,他还可以进行些计算,如 a = [{1,2;3,4}+5] '可以这样,可以去看看结果中各元素是怎样的 a = [{1,2;3,4}&"可以"] '这样也行 a = [{1,2;3,4}&{"a","b";"c","d"}] '同样这样还是可以 这是不是就是与单元格中输入公式并选中一些地方后按F9所看到的差不多? 它除了与数组而外,还有: MsgBox [sum(a1:b4)] '假设当前表的a1:b4中为数字,这样就求和了 与 MsgBox Evaluate("sum(a1:b4)")、MsgBox WorksheetFunction.Sum(Range("a1:b4")) 功能都是一样的,只是写起来是不是简单多了?但快不快就不晓得哈 总之,就一句话:在单元格中可以怎样整的在VBA中就用[ ]怎样整就成了但此贴不是鼓吹使用[ ]而不用array哈,各有千秋嘛。哈哈

相关文档
最新文档