本人在DotNet中使用了第三方控件其中Uint类型,据.Net帮助中描述,Uint对应.Net中int类型,原本就可直接转换,为什么转换后的值与结果为什么会不同?int -2,147,483,648 到 2,147,483,647 有符号 32 位整数 uint 0 到 4,294,967,295 无符号 32 位整数 哪之间转换是不是有特殊的方式
第一个问题:
通过一个
 Color.FromArgb(210,210,210).ToArgb()获取一个RGB值(RGB是灰色)并直接转换成((uint)Color.FromArgb(210,210,210).ToArgb())uint类型,显示的结果是暗红色。我该如何用正确的转换成uint值?
第二个:
byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值,
MyData是个byte[]类型,MyData如何转换Uint类型。

解决方案 »

  1.   

    会不会第三方控件用的是Windows 颜色
    Dim myColor As Color = Color.Red
    ' Translate myColor to an OLE color.
    Dim winColor As Integer = ColorTranslator.ToWin32(myColor)
      

  2.   

    试试
    (uint)ColorTranslator.ToWin32(olor.FromArgb(210,210,210))

    (uint)ColorTranslator.ToOle(olor.FromArgb(210,210,210))
      

  3.   

    先谢谢二位回贴。to:pupo(泡泡) 第一个问题你说得很对。但第二个问题又如何解决呢?
      

  4.   

    byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值,
    --------------------------------
    这个长度是多少,是4个字节吗?(MyData.Lentgh == 4) 成立否?
      

  5.   

    uint n = BitConverter.ToUInt32(MyData , 0);
      

  6.   

    那怎么可以转换成一个 uint?
      

  7.   

    uint [] n = new uint[MyData.Length / 4];
    for (int i = 0; i < MyData.Length / 4; i++)
    {
      n[i] = BitConverter.ToUInt32(MyData, i*4);
    }
      

  8.   

    哈哈,可以取一大半的分了,我用Excel时就遇到这个问题,下一句就OK了
    _xlRange.Font.Color = System.Drawing.ColorTranslator.ToOle(_excelFont.ForeColor);其它的转换楼主可以试试类似方法下面是我试验的其它过程,当时也苦啊,希望朋友们遇到类似问题时不再这么苦了:)
    //读者在这要注意:在这需要一个转换的过程,我试了好长时间。
    //经过反向读取单格的颜色,发现返回的是double型
    //_xlRange.Font.Color = new byte[]{color.R,color.G,color.B};  //color.ToArgb();
    //_xlRange.Font.Color = Convert.ToInt32(color.ToArgb()); //用此种后,蓝红颠倒了,绿色正好不变 if (!_excelFont.ForeColor.IsEmpty)
    {
    _xlRange.Font.Color = System.Drawing.ColorTranslator.ToOle(_excelFont.ForeColor);
    }// if (!_excelFont.Background.IsEmpty)
    // {
    // _xlRange.Font.Background = System.Drawing.ColorTranslator.ToOle(_excelFont.Background);
    // }
      

  9.   

    Sorry,我看错了应该MyData转换成int类型。BitConverter.ToInt32(MyData,MyData.Length)这个行不通
      

  10.   

    很多转换是需要有条件的,并不是想怎么转就怎么转的.主要看你的MyData符不符合转换条件.
    字节转成int32就是用BitConverter.ToInt32这个方法的
      

  11.   

    BitConverter.ToInt32 方法  [Visual Basic]请参见返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。
      

  12.   

    我想把一个大对象byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值
    转换成int,在第三方控件中flow.LoadMemory(int HMem)方法中HMem这个参数是一个大对象的句柄才对是不是?。哪byte[] MyData 这个对象的句柄是多少了?
      

  13.   

    to: wuyi8808(tm) studio   :), flygoldfish(长江支流) , pupo(泡泡) 各位大侠别走啊。这个问题当住我一天了。急
      

  14.   

    你要的是wfd.FlowImage这个对象的句丙吧??
      

  15.   

    byte [] MyData = wfd.FlowImage;//一个大对象
    ---------------------------------一个大对象的句柄无法从 byte [] MyData 得到,你看一下是否有:int HMem = wfd.HMem 这个属性。
      

  16.   

    大侠你总算是来了,是的我想得到wfd.FlowImage句柄
      

  17.   

    int HMem = wfd.HMem 这个是没有的我仔细看了好几遍了
      

  18.   

    byte[] MyData = wfd.FlowImage;
    System.RuntimeTypeHandle handle = Type.GetTypeHandle(MyData);
    MessageBox.Show(handle.Value.ToInt32().ToString());或者直接取wfd.FlowImage对象的句柄
    System.RuntimeTypeHandle handle = Type.GetTypeHandle(wfd.FlowImage);
    MessageBox.Show(handle.Value.ToInt32().ToString());