当前位置: 首页 > news >正文

用AI助手写程序

用AI帮助写程序究竟靠不靠谱,下面来测试一下:

在文心一言中输入:写一个C++ Windows API串口通信程序。结果如下:

#include <windows.h>  
#include <iostream>  // 串口配置  
void ConfigureCommPort(HANDLE hComm) {  DCB dcbSerialParams = {0};  dcbSerialParams.DCBlength = sizeof(dcbSerialParams);  if (!GetCommState(hComm, &dcbSerialParams)) {  std::cerr << "Error getting state" << std::endl;  return;  }  dcbSerialParams.BaudRate = CBR_9600;  dcbSerialParams.ByteSize = 8;  dcbSerialParams.StopBits = ONESTOPBIT;  dcbSerialParams.Parity = NOPARITY;  if (!SetCommState(hComm, &dcbSerialParams)) {  std::cerr << "Error setting serial port state" << std::endl;  return;  }  COMMTIMEOUTS timeouts = {0};  timeouts.ReadIntervalTimeout = 50;  timeouts.ReadTotalTimeoutConstant = 50;  timeouts.ReadTotalTimeoutMultiplier = 10;  timeouts.WriteTotalTimeoutConstant = 50;  timeouts.WriteTotalTimeoutMultiplier = 10;  if (!SetCommTimeouts(hComm, &timeouts)) {  std::cerr << "Error setting timeouts" << std::endl;  return;  }  
}  // 发送数据  
bool WriteCommPort(HANDLE hComm, const char* data, DWORD length) {  DWORD bytes_written;  if (!WriteFile(hComm, data, length, &bytes_written, NULL)) {  std::cerr << "Error writing to serial port" << std::endl;  return false;  }  return true;  
}  // 接收数据  
bool ReadCommPort(HANDLE hComm, char* buffer, DWORD buffer_size, LPDWORD bytes_read) {  if (!ReadFile(hComm, buffer, buffer_size, bytes_read, NULL)) {  std::cerr << "Error reading from serial port" << std::endl;  return false;  }  return true;  
}  int main() {  HANDLE hComm;  hComm = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);  if (hComm == INVALID_HANDLE_VALUE) {  std::cerr << "Error opening serial port" << std::endl;  return 1;  }  ConfigureCommPort(hComm);  const char* send_data = "Hello, Serial Port!";  if (!WriteCommPort(hComm, send_data, strlen(send_data))) {  CloseHandle(hComm);  return 1;  }  char buffer[128];  DWORD bytes_read;  if (!ReadCommPort(hComm, buffer, sizeof(buffer), &bytes_read)) {  CloseHandle(hComm);  return 1;  }  buffer[bytes_read] = '\0'; // Null-terminate the string  std::cout << "Received: " << buffer << std::endl;  CloseHandle(hComm);  return 0;  
}

 在钉钉AI助手中同样输入:写一个C++ Windows API串口通信程序,钉钉AI助手结果如下:

        编写一个使用C++和Windows API进行串口通信的程序,涉及到使用Windows的串行通信API函数。以下是一个基础示例程序的概要和关键步骤,这应当能指引你开始编码:1. 包含必要的头文件:首先,在你的C++源文件中包含Windows API中关于串口通信的头文件。#include <windows.h>
#include <stdio.h>
cpp2. 定义串口句柄和配置结构体:你需要一个HANDLE变量来存储串口句柄,并设置DCB结构体来配置串口。HANDLE hSerial;
DCB dcbSerialParams;
cpp3. 打开串口:使用CreateFile函数以指定的参数打开串口。hSerial = CreateFile("COM1", // 串口号,根据实际情况修改
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hSerial == INVALID_HANDLE_VALUE) {
// 处理错误
}
cpp4. 配置串口参数:使用GetCommState获取当前配置,然后修改DCB结构体的成员以设置所需的波特率、数据位、停止位等,最后用SetCommState应用配置。if (!GetCommState(hSerial, &dcbSerialParams)) {
// 处理错误
}
// 配置DCB结构体...
dcbSerialParams.BaudRate = CBR_9600; // 波特率
dcbSerialParams.ByteSize = 8; // 数据位数
dcbSerialParams.StopBits = ONESTOPBIT; // 停止位
dcbSerialParams.Parity = NOPARITY; // 无校验位

if (!SetCommState(hSerial, &dcbSerialParams)) {
// 处理错误
}
cpp5. 读写操作:使用ReadFile和WriteFile函数进行数据的读写。DWORD dwBytesRead, dwBytesWritten;
char buffer[100];

// 写数据
if (!WriteFile(hSerial, "Hello COM1", sizeof("Hello COM1") - 1, &dwBytesWritten, NULL)) {
// 处理错误
}

// 读数据
if (!ReadFile(hSerial, buffer, sizeof(buffer), &dwBytesRead, NULL)) {
// 处理错误
}
buffer[dwBytesRead] = '\0'; // 添加字符串结束符
printf("Received: %s\n", buffer);
cpp6. 关闭串口:使用CloseHandle关闭串口句柄。CloseHandle(hSerial);
cpp以上是一个基本的C++ Windows API串口通信程序的框架。请根据实际需求调整串口号、波特率等参数,并添加适当的错误处理机制。由于编写和调试实际代码超出了我的直接服务范围,我无法直接为你编写或测试代码。但根据上述指南,你应该能够着手实现你的串口通信程序。

   2  在文心一言中输入:写一个OpenCV Mat对象转BitMap对象程序。结果如下:

import org.opencv.android.Utils;  
import org.opencv.core.Mat;  import android.graphics.Bitmap;  public Bitmap matToBitmap(Mat src) {  // 创建一个空的Bitmap对象  Bitmap bmp = null;  if (src != null && !src.empty()) {  // 将Mat对象转换为Bitmap,这里注意OpenCV的Mat图像是BGR格式,而Android Bitmap是ARGB_8888格式  // 因此,我们不需要进行颜色空间转换(如果Mat已经是RGB,则需要)  // 第二个参数是是否需要对图像进行缩放,这里传入false表示不进行缩放  // 第四个参数是要求的目标Bitmap的像素类型,这里使用ARGB_8888  bmp = Bitmap.createBitmap(src.cols(), src.rows(), Bitmap.Config.ARGB_8888);  // 调用Utils类的matToBitmap方法完成转换  Utils.matToBitmap(src, bmp);  }  return bmp;  
}

   再输入:写一个OpenCV C++ Mat对象转BitMap对象程序,结果如下:

#include <opencv2/opencv.hpp>  
#include <vector>  // 假设这个函数用于将Mat转换为字节数组(模拟Bitmap数据)  
std::vector<unsigned char> MatToByteArray(const cv::Mat& mat) {  if (mat.empty()) {  throw std::runtime_error("Mat is empty!");  }  // OpenCV的Mat是BGR格式的,我们需要转换为ARGB格式(Android Bitmap格式)  // 注意:这里我们简单地忽略了Alpha通道,将其设置为255(不透明)  std::vector<unsigned char> bitmapData;  bitmapData.resize(mat.rows * mat.cols * 4); // ARGB,所以每个像素4个字节  for (int y = 0; y < mat.rows; ++y) {  for (int x = 0; x < mat.cols; ++x) {  cv::Vec3b bgr = mat.at<cv::Vec3b>(y, x); // 获取BGR像素值  // 设置ARGB值,注意顺序和忽略Alpha(设为255)  bitmapData[(y * mat.cols + x) * 4 + 0] = 255; // A  bitmapData[(y * mat.cols + x) * 4 + 1] = bgr[2]; // R  bitmapData[(y * mat.cols + x) * 4 + 2] = bgr[1]; // G  bitmapData[(y * mat.cols + x) * 4 + 3] = bgr[0]; // B  }  }  return bitmapData;  
}  // 注意:这个函数没有直接创建Android Bitmap对象,而是创建了一个可以在C++中使用的字节数组  
// 你需要通过JNI将这个字节数组传递给Java层,并在那里创建Bitmap对象

 在钉钉AI助手中输入:写一个OpenCV Mat对象转BitMap对象程序,结果如下:

        要将OpenCV的Mat对象转换为Windows GDI的Bitmap对象,你可以按照以下步骤编写程序:1. 包含必要的头文件: 确保你的程序包含了OpenCV和Windows GDI相关的头文件。#include <opencv2/opencv.hpp>
#include <windows.h>
cpp2. 定义转换函数: 创建一个函数,该函数接受一个OpenCV的cv::Mat对象,并返回一个指向HBITMAP(位图句柄)的指针。这个函数将执行实际的转换操作。HBITMAP MatToBitmap(const cv::Mat& matImage)
{
if (matImage.empty())
return NULL;

// 获取图像的宽度和高度
int width = matImage.cols;
int height = matImage.rows;

// 创建兼容DC(设备上下文)
HDC hdc = GetDC(NULL);
HDC compatibleDC = CreateCompatibleDC(hdc);

// 创建Bitmap信息头
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height; // 高度为负表示顶部向下增长
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;

// 创建DIB(设备无关位图)
void* pBits;
HBITMAP hBitmap = CreateDIBSection(compatibleDC, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0);

// 将Mat数据复制到Bitmap
memcpy(pBits, matImage.data, matImage.total() * matImage.elemSize());

// 清理
DeleteDC(compatibleDC);
ReleaseDC(NULL, hdc);

return hBitmap;
}
cpp3. 使用转换函数: 现在,你可以使用上面定义的MatToBitmap函数将任何OpenCV的Mat对象转换为Bitmap对象。例如:int main()
{
cv::Mat img = cv::imread("image_path.jpg"); // 读取图像
if (img.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}

HBITMAP hBitmap = MatToBitmap(img);
if (hBitmap != NULL)
{
// 使用hBitmap进行GDI操作,如显示在窗口等
// ...

// 不要忘记释放Bitmap资源
DeleteObject(hBitmap);
}

return 0;
}
cpp以上代码演示了如何将OpenCV的Mat对象转换为Windows Bitmap对象,并提供了基本的错误检查和资源管理。请根据你的具体应用场景调整和使用这段代码。由于我已经提供了完整的解决方案,接下来的操作为:内容由AI生成保存代码到文档如何在C++中显示Bitmap?这段代码有哪些优化空间?

      二者比较,文心一言像个老手认真在写程序(先不说这个程序怎么样),钉钉AI助手感觉有点像在写教程。不管怎么样,对写程序确实都有些帮助,是很好的工具。想依靠它们来独立完成一个功能齐全的复杂程序,目前还不太现实。

相关文章:

用AI助手写程序

用AI帮助写程序究竟靠不靠谱&#xff0c;下面来测试一下&#xff1a; 在文心一言中输入&#xff1a;写一个C Windows API串口通信程序。结果如下&#xff1a; #include <windows.h> #include <iostream> // 串口配置 void ConfigureCommPort(HANDLE hComm) {…...

动手学深度学习7.2 使用块的网络(VGG)-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;25 使用块的网络 VGG【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;7.2. 使用…...

SolidityFoundry ERC4626

ERC4626简介 ERC4626 协议是一种用于代币化保险库的标准。 我们经常说 DeFi 是货币乐高&#xff0c;可以通过组合多个协议来创造新的协议&#xff1b; ERC4626 扩展了 ERC20 代币标准&#xff0c;旨在推动收益金库的标准化&#xff0c;它是 DeFi 乐高中的基础&#xff0c;它允…...

大模型时代的操作系统:融合 Rust 和大模型,打造 AI 操作系统

每次技术革命&#xff0c;无论是个人电脑、互联网还是移动设备&#xff0c;总是从硬件开始&#xff0c;然后演化到软件层。而操作系统是计算机系统的核心&#xff0c;没有它&#xff0c;计算机就只是一堆硬件&#xff0c;无法运行任何程序。 微软 CEO 萨蒂亚纳德拉曾将生成式 …...

【ML】为什么要做batch normlization,怎么做batch normlization

为什么要做batch normlization&#xff0c;怎么做batch normlization 1. batch normlization1.1 批量归一化是什么&#xff1a;1.2 为什么要做批量归一化&#xff1a; 2. feature normalization2.1 特征归一化是什么&#xff1a;2.2 为什么要做特征归一化&#xff1a; 3. batc…...

【C++指南】命名空间

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 一、命名空间的重要性 1. C语言中没有命名空间而存在的问题 2. C引入了命名空间解决的问题 3.…...

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具&#xff0c;用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面&#xff0c;使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括&#xff1a; 集群管理: 监控和管理 NameServer 和 Broker …...

前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天

目录 一&#xff0c;列表-无序和有序的定义列表 二&#xff0c;表格-基本使用与表格结构标签 三&#xff0c;合并单元格 四&#xff0c;表单-input标签 五&#xff0c;表单-下拉菜单 六&#xff0c;表单-文本域 七&#xff0c;表单-label标签 八&#xff0c;表单-按钮 …...

认识MySQL

目录 数据库是什么呢&#xff1f;MySQL 数据库是什么呢&#xff1f; 在我们开始学习MySQL之前&#xff0c;先来了解一下&#xff0c;什么是数据库呢&#xff1f;我相信此时很多人会说是管理数据的&#xff0c;完全正确&#xff01;用数据库我们可以去存储大量的数据。我来给你…...

尚品汇-创建ES索引库(二十七)

目录&#xff1a; &#xff08;1&#xff09;商品检索功能介绍 &#xff08;2&#xff09;根据业务搭建数据结构 &#xff08;3&#xff09;nested 介绍 &#xff08;4&#xff09;搭建service-list服务 &#xff08;5&#xff09;构建实体与es mapping建立映射关系 &…...

设计模式-六大原则

概述 设计模式的六大原则是设计模式的基础&#xff0c;了解设计模式的原则&#xff0c;有利于设计模式实际应用的理解&#xff0c;在真实使用的时候&#xff0c;一般不太可能一个程序满足所有的设计模式六大原则&#xff0c;或多或少都会有违背设计模的地方&#xff0c;所以不…...

MyBatis搭建和增删改查

MyBatis是一个开源的持久层框架&#xff0c;用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置&#xff0c;并自动生成对应的SQL语句&#xff0c;从而简化了数据库操作的编码工作。 MyBatis的核心思想是将SQL语句与Java代码分离&#xff0c;…...

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ &#x1f30f;反向代理&#xff08;Reverse Proxy&#xff09;是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求&#xff0c;并将其转发给后端服务器&#xff0c;然后将后端服务器的响应返回给客户端。客…...

python爬虫番外篇 | Reuqests库高级用法(1)

文章目录 1.会话对象&#xff08;Session Objects&#xff09;2.请求和响应对象&#xff08;Request and Response Objects&#xff09;3.准备好的请求&#xff08;Prepared Requests&#xff09;4.SSL证书验证5.客户端证书6.CA 证书7.正文内容工作流程&#xff08;Body Conten…...

【链表OJ】常见面试题 3

文章目录 1.[环形链表II](https://leetcode.cn/problems/linked-list-cycle-ii/description/)1.1 题目要求1.2 快慢指针1.3 哈希法 2.[随机链表的复制](https://leetcode.cn/problems/copy-list-with-random-pointer/description/)2.1 题目要求2.2 迭代法 1.环形链表II 1.1 题目…...

Linux学习笔记9(Linux包管理)

目录 归档包管理 归档 查看归档包 解归档包 压缩包管理 Zip/unzip gzip/gunzip bzip2/bunzip2 源码包安装软件 三大步&#xff1a; 预备步骤&#xff1a;安装依赖的编译库 一、./configure --prefix/usr/local/nginx 二、make 三、make install 软件包安装 配置…...

论文阅读《Geometric deep learning of RNA structure》

引入了机器学习方法&#xff0c;通过少量的数据学习。只使用原子坐标作为输入。 预测RNA三维结构比预测蛋白质结构更困难。 设计了一个原子旋转等变评分器ARES&#xff0c;由每个原子的三维坐标和化学元素类型&#xff08;输入&#xff09;指定&#xff0c;ARES预测模型与未知真…...

宏集方案 | 传统建筑智能化改造,迈向物联新时代

前言 智能建筑涉及多个系统的集成&#xff0c;如照明、空调、安防等&#xff0c;这些系统的兼容性和协调运作是一大挑战。然而&#xff0c;传统的工业建筑和商业楼宇受早期设计的局限&#xff0c;多个控制系统间互不兼容&#xff0c;并且难以重新部署通信线缆。 针对传统建筑…...

如果服务器更改Web端口会减少被攻击的风险吗?

通过更改服务器的Web端口&#xff0c;是否能够显著降低被攻击的风险?首先&#xff0c;理解Web服务默认使用的端口是关键。HTTP协议通常使用80端口&#xff0c;而HTTPS则默认使用443端口。这些端口因其广泛认知而成为黑客攻击的首要目标。理论上&#xff0c;将Web服务迁移到非标…...

vim列编辑模式

在编辑文本时&#xff0c;经常会有这样的需求&#xff0c;对特定列进行进行批量编辑。比如批量注释一段代码&#xff0c;或者删除待定字符&#xff08;如一列空格&#xff09;。幸运的是VIM支持列编辑模式。 假设文本内容&#xff1a; Maximum length of a custom vocabulary…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...