首页
关于
Search
1
C#对接chatgpt
114 阅读
2
winform中combobox绑定数据源
102 阅读
3
免费ChatGPTKey分享
100 阅读
4
C语言中的类型衰变
88 阅读
5
反射异步调用
56 阅读
技术分享
后端分享
前端分享
福利活动
资源分享
天天向上
登录
/
注册
Search
标签搜索
C#
ChatGpt
DotNet
.NET
SSE
Stream
winform
c
dynamic
反序列化
反射
异步
gpt
ai
西街长安
累计撰写
12
篇文章
累计收到
45
条评论
首页
栏目
技术分享
后端分享
前端分享
福利活动
资源分享
天天向上
页面
关于
搜索到
8
篇与
的结果
2023-06-23
C语言中的类型衰变
类型衰变(type decay)是指在特定情况下,数组作为函数参数传递时会自动转换为指向数组首个元素的指针类型。在C语言中,当你将数组作为函数参数传递时,数组的名称会自动转换为指向数组首个元素的指针。这意味着在函数内部,你将看到一个指针,而不是原始的数组。这种转换称为类型衰变。类型衰变的情况包括:将数组作为函数参数传递。将数组赋值给指针变量。将数组作为表达式的一部分参与运算。例如,考虑以下代码片段:void printArray(int arr[], int size) { // 函数内部使用指针访问数组 for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } } int main() { int myArray[] = {1, 2, 3, 4, 5}; // 将数组作为参数传递给函数 printArray(myArray, 5); // 数组赋值给指针变量 int* ptr = myArray; // 数组作为表达式的一部分 int value = *(myArray + 2); return 0; }在上述示例中,myArray 数组在函数调用、赋值和表达式中都发生了类型衰变。在函数 printArray 中,arr 参数被自动转换为指向 myArray 首个元素的指针,而不是一个完整的数组。同样地,将 myArray 赋值给指针变量 ptr,以及在表达式 *(myArray + 2) 中使用数组,都会发生类型衰变。类型衰变的结果是,在函数内部或其他上下文中,你无法通过 sizeof 运算符获取数组的真实大小,因为此时数组已经被转换为指针类型。要想在函数中获取数组的大小,你需要将数组的大小作为额外的参数传递给函数。
2023年06月23日
88 阅读
1 评论
65 点赞
2023-05-31
C#对接chatgpt
获取OpenAI API密钥:首先,需要在OpenAI网站上注册并获取API密钥。这将允许通过API与ChatGPT进行通信。之后我们再创建几个类用于储存需要提交的数据。internal record class Message(string role,string content);internal class Data { public string model = "gpt-3.5-turbo"; public Message[] messages; public float temperature=0.7f; public bool stream = false;//此处是告诉chatgpt是否通过流返回数据,如果为true,则后面代码中的Reader.ReadToEnd()要修改为Reader.ReadLine() }发起HTTP请求:使用C#中的HttpClient类,可以发起HTTP POST请求来与OpenAI API进行通信。在请求标头中,需要设置Authorization标头,并在请求主体中提供必要的参数。using System.Text.Json; using System.Net.Http; using System.Text; using System.Net.Http.Headers; using System.Net.Http.Json; using Newtonsoft.Json; using System.Net; namespace ConsoleApp13 { internal class Program { static void Main(string[] args) { string key = "这里填你的Key"; string result = "";//这里是最后拿到的json数据 HttpWebRequest http = (HttpWebRequest)WebRequest.Create("https://api.openai.com/v1/chat/completions"); Data data = new Data() { messages=new Message[] {new Message("user","用c#写登录功能")} }; http.ContentType = "application/json"; http.Method = "POST"; http.Headers.Add("Authorization", $"Bearer {Key}"); byte[] bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data)); http.ContentLength = bytes.Length; using (Stream streamr = http.GetRequestStream()) { streamr.Write(bytes, 0, bytes.Length); } HttpWebResponse response = (HttpWebResponse)http.GetResponse(); Stream stream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(stream)) { result = reader.ReadToEnd(); } } } }{alert type="info"}成功对接ChatGpt后可以利用Asp.Net写chatgpt接口。{/alert}{alert type="info"}另外需要注意的是,如果是通过流接收数据,使用httpclient时会在响应完成后返回所有数据,而不是逐字返回。{/alert}
2023年05月31日
114 阅读
1 评论
70 点赞
2023-05-30
c#httpclient类响应未结束无法截取内容
C# 中的 HttpClient 类在处理流(stream)时,通常需要完整地读取整个流,而无法在流的中间截取内容。这是因为 HttpClient 是基于 HTTP 协议的客户端库,它是为了下载完整的响应内容而设计的。如果你想在下载响应的过程中截取内容,你可以使用 HttpWebRequest 类来代替 HttpClient。HttpWebRequest 类提供了更底层的控制,允许你以流的形式逐步读取响应内容。以下是一个示例代码:using System; using System.IO; using System.Net; class Program { static void Main() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com"); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (MemoryStream memoryStream = new MemoryStream()) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) { // 处理截取的内容 memoryStream.Write(buffer, 0, bytesRead); } // 在这里可以访问 memoryStream 中的截取的内容 byte[] content = memoryStream.ToArray(); // 进行后续处理 Console.WriteLine(content.Length); } } }...上面的代码使用 HttpWebRequest 发起请求并逐步读取响应的内容,将其保存在 memoryStream 中。在 memoryStream 中可以访问截取的内容并进行后续处理。请注意,使用 HttpWebRequest 需要更多的手动处理和更底层的操作,相对于 HttpClient 而言更加复杂。因此,在许多情况下,仍建议使用 HttpClient 完整下载响应,然后在内存中截取所需内容。
2023年05月30日
53 阅读
1 评论
2 点赞
1
2