C#中的无符号字符指针?
在将一些代码从C ++转换为C#的中间,我发现了这个, unsigned char *p = m_pRecvBuffer + 5; unsigned int noncelen1 = *p * 256 + p[1]; 如何将其转换为C#? m_pRecvBuffer是一个char-array,但是我将其存储为字节阵列. 解决方案 类似于 的东西 byte[] p = new byte[m_pRecvBuffer.Length - 5]; Array.Copy(m_precvBuffer, p, m_pRecvBuffer.Length - 5); uint noncelen1 = p[0] * 256 + p[1]; 但是,在这种情况下,我认为您实际上不需要使用数组副本.只是使用 uint noncelen1 = p[5] * 256 + p[6]; 我猜应该就足够了. 其他解决方案 嗯,我想知道是否有一些重构是为了获得此代码.是的,您可以使用
10 2024-04-26
编程技术问答社区
在C#的字节中,这种奇怪的语法是什么*?
可能的重复: dotnet-什么是int*? 嗨,我正在查看库的一些源代码,看到了这个byte*,最后的星星是什么? ,不仅具有类字节,还带有一些变量名称 var1 = *var3 - *var2; 预先感谢 解决方案 是指针(到Byte). 其他解决方案 当在数据类型上使用*时,它是指向该类型的指针. byte*是指向字节的指针. 在变量上使用时,它将取消指针. var3的值是指针,*var3的值是指向指向的字节(或任何类型). 其他解决方案 我可以肯定它的不安全代码.
4 2024-04-26
编程技术问答社区
C#和C++-P/invoke之间的指针
嗨,我试图从C#调用一些C ++代码.因此,我遵循了几个教程,AMDE我自己的DLL,现在我从C#包装器中称呼它.问题是,我有一个接收指针的函数,而且我似乎无法使其起作用,Visual Studio只是向我展示了我不太了解的红色错误.有人可以告诉我我在做什么错吗? 我还有另一个问题,如果C ++中的功能调用其他功能,所有数据将保持完整吗?因为我通过的这个数组将在DLL内进行操纵,然后,我将从DLL中调用其他功能以获取结果 - 我担心数据在函数呼叫之间丢失! 谢谢! dll .h #include #include #include #include #include #include #include #include #include
12 2024-04-26
编程技术问答社区
PInvoke 指向包括浮动数组的结构的指针
我正在尝试调用c库,以便在Xamarin Android应用程序上使用. 考虑以下C结构: typedef struct { bool myBool; myOtherStruct sOtherStruct; int myInt; float myFloat; float myFloatArray[1024]; float myFloatArray2[1024]; float myFloatArray3[20]; float myFloatArray4[30]; } sMyStruct; 这是使用以下函数来称呼的: unsigned int initialise(sMyStruct* a_pMyStruct) 我将其放入C#结构中: [StructLayout(LayoutKind.Sequential)] public unsafe struct SMyStruct { bool my
4 2024-04-26
编程技术问答社区
C# 使用不安全指针在图像上绘图
我正在尝试使用不安全的指针访问(用于性能提升)将几个像素设置在位图中 - 这是我的代码: private unsafe void DrawImage(Bitmap bmp1) { BitmapData bmData = bmp1.LockBits(new Rectangle(0, 0, bmp1.Width, bmp1.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp1.PixelFormat); IntPtr scan0 = bmData.Scan0; int stride = bmData.Stride; int x = 200; int y = 400; for (; y
6 2024-04-26
编程技术问答社区
将属性作为获取和设置的参数进行传递
好吧,我需要为许多属性重复相同的代码. 我已经看到了参加Action代表的示例,但是他们在这里不太合适. 我想要这样的东西:(请参阅下面的说明) Dictionary PropertyCorrectValues; public bool CheckValue(Property P) { return P.Value == PropertyCorrectValues[P]; } public void DoCorrection(Property P) { P.Value = PropertyCorrectValues[P]; } . 我想拥有一个包含许多属性及其各自的"正确"值的字典. (我知道这不是很好,但这就是主意).属性不一定是我的班级,其中一些在不同的组件中. 方法bool CheckValue(Property).此方法必须access the actual value的属性和compare to the c
6 2024-04-26
编程技术问答社区
WPF单例窗口+ClickOnce+传递参数
情况: 我的应用程序被设计为单次 - > 工作 我的应用程序通过clickonce-> 工作 新请求是,您可以将参数传递给此应用程序.目前用ApplicationDeployment.CurrentDeployment.ActivationUri.Query; 实现这一点 现在是棘手的部分.应该通过的参数是文件名或路径. 解析这没问题. 但是,由于我的单个instance是用PostMessage实现的,因此我在将参数传递到运行实例的麻烦中. 我的本机'S级: internal static class NativeMethods { public const int HwndBroadcast = 0xffff; public static readonly int WmShowme = RegisterWindowMessage("WM_SHOWME"); public static readonly int Se
6 2024-04-25
编程技术问答社区
我如何正确地循环并打印Int、Long、Float或BigInteger的位?
我正在尝试调试一些变化的操作,我需要在位移动操作之前和之后可视化它们的位. 我从这个答案中读到我可能需要从转移中处理回填,但我不确定是什么这意味着 我认为,通过问这个问题(我如何在int中打印位),我可以弄清楚什么是回填,也许还有其他一些问题. 这是我到目前为止的示例代码. static string GetBits(int num) { StringBuilder sb = new StringBuilder(); uint bits = (uint)num; while (bits!=0) { bits >>= 1; isBitSet = // somehow do an | operation on the first bit. // I'm unsure if it's poss
4 2024-04-25
编程技术问答社区
C# 对象的数组是否存储所述对象的指针?
肯定必须有这样一个问题,但是我找不到它 - 也许我在措辞错误.我所有的搜索都导致有关如何在C#中使用数组的文章. 一点背景:我正在尝试将许多对象加载到数组中.我想知道,由于数组中的指针过多或累积对象的大小,该数组是否会获得outofmemory例外.我知道对象在.NET中具有先天的2 GB尺寸限制,但它源于数组中的对象? 例如,如果我的数组中有n个对象,则数组的内存大小是n * sizeof(object)或n * sizeof(pointer)? 解决方案 如果对象是值类型,则将实际对象存储在数组中,并且数组的大小为n *对象的大小.如果类型是参考类型,则数组是存储对其他地方对象的引用,并且数组的大小为n *指针的大小. 其他解决方案 数组仅由元素类型的n个插槽组成.如果元素类型是参考类型,则数组存储引用(最初是所有null).没有针对涉及的特殊情况与值键入元素. 数组在逻辑上不可能将参考类型对象"内联"保存.如果这些类没有默认构造函数怎么办?那么您无
8 2024-04-25
编程技术问答社区
在每次Enqueue()之后,队列中的所有值都变得相同。
我正在通过套接字接收一些数据,并试图将其添加到队列中,以便可以被另一个线程较慢,类似于缓冲区的线程. . 问题在于,每次我加入新值时,队列中的所有值都会成为. byte[] aux = new byte[1464]; aux = (byte[])ar.AsyncState; //add the package to the package fifo list lock (lockPktBuffer) { packetBuffer.Enqueue(aux); } 首先,我以为我正在通过指针,所以所有条目都指向相同的变量. 所以我尝试这样做:
14 2024-04-25
编程技术问答社区
在位图保存过程中,GDI+中发生了一个通用错误
我运行此代码 Bitmap im = new Bitmap(600, 600, PixelFormat.Format16bppGrayScale); int height = im.Height; int width = im.Width; Point p1 = new Point(0, 0); Point p2 = new Point(im.Size.Width, 0); Point p3 = new Point(im.Width / 2, im.Height); Random r = new Random(); Point p = new Point(r.Next(0, im.Size.Width), r.Next(0, im.Size.Height)); BitmapData data = im.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format16b
8 2024-04-24
编程技术问答社区
如何在C#中把一个数组放在一个结构内?
C ++代码: struct tPacket { WORD word1; WORD word2; BYTE byte1; BYTE byte2; BYTE array123[8]; } static char data[8192] = {0}; ... some code to fill up the array ... tPacket * packet = (tPacket *)data; 我们不能在C#中很容易做到这一点. 请注意,C ++结构中有一个数组. 另外,使用此源文件可以为我们完成这项工作,但如果结构中有一个数组. 解决方案 您要寻找的是(如果您使用的类似结构定义与@jaredpar发布)是这样的: tPacket t = new tPacket(); byte[] buffer = new byte[Marshal.SizeOf(typeof(tPacket))]; socket.Receive
8 2024-04-24
编程技术问答社区
如何在C#中使用指针安全地清除TextBox的内容?
我目前正在尝试以Windows表单制作密码存储系统,我听说您应该在使用它完成后尽快覆盖包含敏感信息的字符串.由于字符串在C#中是不可变的,因此我决定尝试使用指示器清除包含用户名和密码的两个TextBox.我尝试了两种方法从 can您可以通过不安全的方法更改(不变的)字符串的内容吗?(OP的方法和接受的答案),但它们似乎都无法从A TextBox中清除文本(尽管它们用于普通字符串);我也找不到互联网上的任何答案.这是一个预期的功能,还是我在代码中做错了什么?我的方法过于杀伤吗?我的方法根本不起作用吗? 代码: // First method that I tried unsafe { if (this.textBox1.Text != String.Empty) fixed (char* usr = this.textBox1.Text) for (int i = 0; i
8 2024-04-24
编程技术问答社区
在C#中的指针?
在一个C#维护项目中,我遇到了以下变量声明: Int32* iProgressAddress; 是C#? 中的指针声明 我以为C#中没有指针概念,该语句是什么意思? 解决方案 c#确实支持指针,但它仅限于指向非托管类型的原始数据类型,例如ints,floats,enums和其他指针类型(加上其余的原始类型). 编辑:以及价值类型 其他解决方案 是的,是. 请注意,该方法被标记为unsafe.以及组件. 在使用托管代码的指针之前,有很多事情要知道. 例如,指针固定. 其他解决方案 很抱歉,恐怕这是一个指针,您必须习惯它. 真的!指针并不是那么可怕. :)
6 2024-04-24
编程技术问答社区
如何获得一个指向Array实例的内存指针?
网上有很多示例如何将指针指向byte[]或int[,],即当您确切地知道数组的元素类型和等级时.但是如何获取通用Array的指针? 这里的主要问题是我不知道在进步中排名.我也不知道元素类型,但我知道只有原始数字类型(就我而言),所以我可以输入一些额外的if s来应对. 背景:我想制定此解决方案 a>更通用 - 在当前形式中,它仅与double[,]一起使用,因此给出了经典等级+类型: double[,] doubles = { { 1, 2, 3, 4 }, ... }; fixed (double* p = doubles) { ... 首次尝试 来自奥利维尔的答案,所有错误都是我的. Array data = new float[,] { { 4, 2 }, { 77, 3 } }; var reference = __makeref(data); IntPtr pointer = **(IntPtr**)(&referen
12 2024-04-24
编程技术问答社区
C#字符串到长指针
我正在使用C#中的应用程序,该应用程序需要将消息发送到C ++应用程序. 我导入 [DllImport("user32.dll")] public static extern IntPtr SendMessage( int hWnd, // handle to destination window uint Msg, // message IntPtr wParam, // first message parameter IntPtr lParam // second message parameter ); 但是,现在,我的问题是我需要将字符串调整到wparam和lparam .我尝试了不安全的代码,但是字符串似乎不像其他变量那样工作.我该如何实现?谢谢. 解决方案 我们最终使用"
6 2024-04-23
编程技术问答社区
为什么用方法返回一个指针会使测试在调试模式下失败?
当我以发布模式启动以下测试时,它们都通过,但是在调试模式下它们都失败了. [TestFixture] public unsafe class WrapperTests { [Test] public void should_correctly_set_the_size() { var wrapper = new Wrapper(); wrapper.q->size = 1; Assert.AreEqual(1, wrapper.rep()->size); // Expected 1 But was: 0 } [Test] public void should_correctly_set_the_refcount() { var wrapper = new Wrapper(); Assert.AreEqual(1, wrapper.rep()->
10 2024-04-23
编程技术问答社区
无法将位图转换为iPlimage
我正在尝试制作一个图像裁剪工具. 我正在关注此但是,由于它有点旧,并且插件/dll的使用已更改,所以我一直在尝试将他的代码从OpenCvSharp 2.0调整为OpenCvSharp 2.4 当我将位图转换为iPlimages并使用cv.mul()时,它给了我这个错误: 试图读取或写下受保护的内存.这通常表明其他内存损坏 我从未使用过OpenCvSharp创建IPLIMAGE的其他方法,甚至从书面图像中读取Iplimage. 代码: public static IplImage BitmapToIplImage(Bitmap bitmap) { IplImage tmp, tmp2; System.Drawing.Rectangle bRect = new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), new System.Drawin
4 2024-04-23
编程技术问答社区
指向数组元素
我要实现的是说我有一个数组,我希望通过指向整个代码中的特定数组元素. 例如,在C ++中,我可以这样做 int main(){ int arr [5]= {1,2,3,4,5}; int *c = &arr[3]; cout
6 2024-04-23
编程技术问答社区
在C#中使用指针工作
我该如何使用指针? 解决方案 已经说过使用 C#中的指针;尽管如此,必须使用,这是其他解决方案 除了已经指出的其他答案外,应避免使用指针和不安全的代码. 您想避免使用unsafe代码在整个代码库上分布,所以我建议在所有不安全的呼叫上写一个.NET包装器,这样您只需要在一个地方担心它即可.甚至可能为此创建一个类库,但这取决于您的工作. 使用包装纸记得呼叫包装器的Dispose方法的人显然非常重要,并且要确保正确处理任何指针或其他未管理的资源,但这与您的代码的其余部分没有什么不同. 其他解决方案 最好的做法是避免
8 2024-04-23
编程技术问答社区