小工具 - 浮点计算器

文章目录

    • 小工具 - 浮点计算器
    • 概述
    • 笔记
    • FloatCalcDlg.cpp
    • FloatCalcDlg.h
    • rc
    • END

小工具 - 浮点计算器

概述

在学习CE, 在调试过程中, 经常要看内存中浮点对应的4字节内存到底对应的是啥具体的浮点值. e.g. 0x42860000 => 67.00
转换逻辑挺简单的

float CFloatCalcDlg::uint32_to_float(uint32_t u)
{
	return (*(float*)&u);
}

开始写了一个测试程序, 直接改4字节的值, 编译运行一下, 看打印出的结果.
但是要经常看内存中的4字节数据对应的浮点值, 不胜其烦.
花了半天, 写了一个小工具, 方便多了.
在这里插入图片描述

笔记

编程环境 : vs2019 mfc dlg

FloatCalcDlg.cpp


// FloatCalcDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "FloatCalc.h"
#include "FloatCalcDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CFloatCalcDlg 对话框



CFloatCalcDlg::CFloatCalcDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_FLOATCALC_DIALOG, pParent)
	, m_cs4ByteIn(_T(""))
	, m_cs4ByteOut(_T(""))
	, m_csFloatIn(_T(""))
	, m_csFloatOut(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFloatCalcDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT_TIP, m_ctrlTip);
	DDX_Text(pDX, IDC_EDIT_4BYTES_IN, m_cs4ByteIn);
	DDX_Text(pDX, IDC_EDIT_4BYTES_OUT, m_cs4ByteOut);
	DDX_Text(pDX, IDC_EDIT_FLOAT_IN, m_csFloatIn);
	DDX_Text(pDX, IDC_EDIT_FLOAT_OUT, m_csFloatOut);
}

BEGIN_MESSAGE_MAP(CFloatCalcDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK, &CFloatCalcDlg::OnBnClickedOk)
	ON_BN_CLICKED(IDCANCEL, &CFloatCalcDlg::OnBnClickedCancel)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BUTTON_FLOAT_TO_4BYTES, &CFloatCalcDlg::OnBnClickedButtonFloatTo4bytes)
	ON_BN_CLICKED(IDC_BUTTON_4BYTES_TO_FLOAT, &CFloatCalcDlg::OnBnClickedButton4bytesToFloat)
END_MESSAGE_MAP()


// CFloatCalcDlg 消息处理程序

BOOL CFloatCalcDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	this->SetWindowTextW(TEXT("浮点计算器"));

	addMsg(TEXT("功能:\r\n"));
	addMsg(TEXT("1. 输入浮点数, 转换成4字节\r\n"));
	addMsg(TEXT("2. 输入4字节, 转换成浮点数\r\n"));

	// for test
	this->m_csFloatIn = TEXT("121");
	this->m_cs4ByteIn = TEXT("0x42F20000");
	this->UpdateData(FALSE);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CFloatCalcDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CFloatCalcDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CFloatCalcDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void CFloatCalcDlg::OnBnClickedOk()
{
	CWnd* pWnd = GetFocus();
	if (GetDlgItem(IDOK) == pWnd)
	{
		// 取消默认的回车处理
		CDialogEx::OnOK();
		return;
	}
}


void CFloatCalcDlg::OnBnClickedCancel()
{
	CWnd* pWnd = GetFocus();
	if (GetDlgItem(IDCANCEL) == pWnd)
	{
		// 取消摩恩的ESC键处理
		CDialogEx::OnCancel();
		return;
	}
}


void CFloatCalcDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CDialog::OnOK();
	CDialogEx::OnClose();
}

void CFloatCalcDlg::addMsg(const TCHAR* pcMsg)
{
	do {
		if (NULL == pcMsg)
		{
			break;
		}

		if (_tcslen(pcMsg) > 0)
		{
			m_ctrlTip.SetSel(-1, -1, TRUE);
			m_ctrlTip.ReplaceSel(pcMsg);
		}
		else {
			// 如果给的文本为空字符串, 就说明要清空消息
			m_ctrlTip.SetSel(0, -1, TRUE);
			m_ctrlTip.ReplaceSel(TEXT(""));
		}

		// 加一个回车
		m_ctrlTip.SetSel(-1, -1, TRUE);
		m_ctrlTip.ReplaceSel(TEXT("\r\n"));

	} while (false);
}

void CFloatCalcDlg::OnBnClickedButtonFloatTo4bytes()
{
	byte ary[4];
	CString cs;
	CString csTmp;

	this->UpdateData(TRUE);
	addMsg(TEXT(""));
	addMsg(TEXT("浮点数转4字节"));

	float f = (float)_ttof(m_csFloatIn);
	uint32_t u = *(uint32_t*)&f;

	uint32_to_4byte(u, ary, 4);
	cs.Format(TEXT("0x%.2X%.2X%.2X%.2X"), ary[0], ary[1], ary[2], ary[3]);

	this->m_cs4ByteOut = cs;

	csTmp.Format(TEXT("%.2f to %s\r\n"), f, cs);
	addMsg(csTmp);

	this->UpdateData(FALSE);
}

void CFloatCalcDlg::uint32_to_4byte(uint32_t u, byte* ary, int aryLen)
{
	_ASSERT(NULL != ary);
	_ASSERT(aryLen >= 4);

	ary[0] = (byte)((u >> (8 * 3)) & 0xff);
	ary[1] = (byte)((u >> (8 * 2)) & 0xff);
	ary[2] = (byte)((u >> (8 * 1)) & 0xff);
	ary[3] = (byte)((u >> (8 * 0)) & 0xff);
}


void CFloatCalcDlg::OnBnClickedButton4bytesToFloat()
{
	CString cs;
	CString csTmp;
	uint32_t u;

	this->UpdateData(TRUE);
	addMsg(TEXT(""));
	addMsg(TEXT("4字节转浮点数"));

	cs = this->m_cs4ByteIn;
	cs.MakeUpper();

	if (cs.GetLength() >= 2)
	{
		if ((TEXT('0') == cs[0]) && ((TEXT('X') == cs[1])))
		{
			cs = cs.Right(cs.GetLength() - 2);
		}
	}

	do {
		// 12345678
		if (cs.GetLength() > 8)
		{
			addMsg(TEXT("err : 4字节最多8个16进制字符"));
			break;
		}

		if (!IsHexPsz((LPCTSTR)cs))
		{
			addMsg(TEXT("err : 请输入16进制字符串"));
			break;
		}

		while (cs.GetLength() < 8)
		{
			cs = _T("0") + cs;
		}

		Hex8CharToUint32((LPCTSTR)cs, u);
		this->m_csFloatOut.Format(TEXT("%.2f"), uint32_to_float(u));
		
		csTmp.Format(TEXT("%s to %s\r\n"), m_cs4ByteIn, this->m_csFloatOut);
		addMsg(csTmp);
	} while (false);

	this->UpdateData(FALSE);
}

float CFloatCalcDlg::uint32_to_float(uint32_t u)
{
	return (*(float*)&u);
}

void CFloatCalcDlg::Hex8CharToUint32(const TCHAR* pszHex8, uint32_t& u)
{
	unsigned char uc1;
	unsigned char uc2;

	_ASSERT(NULL != pszHex8);
	_ASSERT(8 == _tcslen(pszHex8));

	_ASSERT(NULL != pszHex8);
	_ASSERT(8 == _tcslen(pszHex8));

	uc1 = OneHexChar2UChar(pszHex8[0]);
	uc2 = OneHexChar2UChar(pszHex8[1]);
	
	u = uc1;
	u <<= 4;
	u += uc2;
	u <<= 4;

	uc1 = OneHexChar2UChar(pszHex8[2]);
	uc2 = OneHexChar2UChar(pszHex8[3]);

	u += uc1;
	u <<= 4;
	u += uc2;
	u <<= 4;

	uc1 = OneHexChar2UChar(pszHex8[4]);
	uc2 = OneHexChar2UChar(pszHex8[5]);

	u += uc1;
	u <<= 4;
	u += uc2;
	u <<= 4;

	uc1 = OneHexChar2UChar(pszHex8[6]);
	uc2 = OneHexChar2UChar(pszHex8[7]);

	u += uc1;
	u <<= 4;
	u += uc2;
}

unsigned char CFloatCalcDlg::OneHexChar2UChar(TCHAR c)
{
	unsigned char uc = 0;
	_ASSERT(((c >= TEXT('0')) && (c <= TEXT('9'))) || ((c >= TEXT('A')) && (c <= TEXT('F'))));

	if ((c >= TEXT('0')) && (c <= TEXT('9')))
	{
		uc = (unsigned char)(c - TEXT('0'));
	}
	else if ((c >= TEXT('A')) && (c <= TEXT('F')))
	{
		uc = (unsigned char)(c - TEXT('A') + 10);
	}

	return uc;
}

bool CFloatCalcDlg::IsHexPsz(const TCHAR* psz)
{
	int i = 0;
	TCHAR c = 0;
	bool b_ok = true;
	_ASSERT(NULL != psz);

	for (i = 0; i < (int)_tcslen(psz); i++)
	{
		c = psz[i];
		if (((c >= TEXT('0')) && (c <= TEXT('9'))) || (c >= TEXT('A')) && (c <= TEXT('F')))
		{

		}
		else {
			b_ok = false;
			break;
		}
	}

	return b_ok;
}

FloatCalcDlg.h


// FloatCalcDlg.h: 头文件
//

#pragma once


// CFloatCalcDlg 对话框
class CFloatCalcDlg : public CDialogEx
{
// 构造
public:
	CFloatCalcDlg(CWnd* pParent = nullptr);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_FLOATCALC_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCancel();
	afx_msg void OnClose();


private:
	void addMsg(const TCHAR* pcMsg);
	void uint32_to_4byte(uint32_t u, byte* ary, int aryLen);
	void Hex8CharToUint32(const TCHAR* pszHex8, uint32_t& u);
	bool IsHexPsz(const TCHAR* psz);
	unsigned char OneHexChar2UChar(TCHAR c);
	float uint32_to_float(uint32_t u);

public:
	CEdit m_ctrlTip;
	afx_msg void OnBnClickedButtonFloatTo4bytes();
	afx_msg void OnBnClickedButton4bytesToFloat();
	CString m_cs4ByteIn;
	CString m_cs4ByteOut;
	CString m_csFloatIn;
	CString m_csFloatOut;
};

rc

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#include "afxres.h"
#include "verrsrc.h"

/
#undef APSTUDIO_READONLY_SYMBOLS

/
// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#ifndef APSTUDIO_INVOKED\r\n"
    "#include ""targetver.h""\r\n"
    "#endif\r\n"
    "#include ""afxres.h""\r\n"
    "#include ""verrsrc.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
    "LANGUAGE 4, 2\r\n"
    "#include ""res\\FloatCalc.rc2""  // 非 Microsoft Visual C++ 编辑的资源\r\n"
    "#include ""l.CHS\\afxres.rc""      // 标准组件\r\n"
    "#if !defined(_AFXDLL)\r\n"
    "#include ""l.CHS\\afxribbon.rc""   // MFC 功能区和控制条资源\r\n"
    "#endif\r\n"
    "#endif\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME           ICON                    "res\\FloatCalc.ico"


/
//
// Dialog
//

IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 FloatCalc"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
    LTEXT           "FloatCalc,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
    LTEXT           "版权所有 (C) 2024",IDC_STATIC,42,26,114,8
    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
END

IDD_FLOATCALC_DIALOG DIALOGEX 0, 0, 295, 131
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    CTEXT           "转换之前",IDC_STATIC,78,7,65,14,SS_CENTERIMAGE
    CTEXT           "转换之后",IDC_STATIC,149,7,65,14,SS_CENTERIMAGE
    CTEXT           "输入为浮点数",IDC_STATIC,7,29,65,14,SS_CENTERIMAGE
    EDITTEXT        IDC_EDIT_FLOAT_IN,78,29,65,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_4BYTES_OUT,149,29,65,14,ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "浮点数转4字节",IDC_BUTTON_FLOAT_TO_4BYTES,222,29,65,14,BS_CENTER | BS_VCENTER
    CTEXT           "输入为4字节",IDC_STATIC,7,49,65,14,SS_CENTERIMAGE
    EDITTEXT        IDC_EDIT_4BYTES_IN,78,49,65,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_FLOAT_OUT,149,49,65,14,ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "4字节转浮点数",IDC_BUTTON_4BYTES_TO_FLOAT,222,49,65,14,BS_CENTER | BS_VCENTER
    EDITTEXT        IDC_EDIT_TIP,7,69,281,55,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN
END


/
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404B0"
        BEGIN
            VALUE "CompanyName", "TODO: <公司名>"
            VALUE "FileDescription", "FloatCalc"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", "FloatCalc.exe"
            VALUE "LegalCopyright", "TODO:  (C) <公司名>。  保留所有权利。"
            VALUE "OriginalFilename", "FloatCalc.exe"
            VALUE "ProductName", "TODO: <产品名>"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x804, 1200
    END
END


/
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_ABOUTBOX, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 163
        TOPMARGIN, 7
        BOTTOMMARGIN, 55
    END

    IDD_FLOATCALC_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 288
        VERTGUIDE, 78
        VERTGUIDE, 149
        VERTGUIDE, 222
        TOPMARGIN, 7
        BOTTOMMARGIN, 124
        HORZGUIDE, 29
        HORZGUIDE, 49
        HORZGUIDE, 69
    END
END
#endif    // APSTUDIO_INVOKED


/
//
// AFX_DIALOG_LAYOUT
//

IDD_FLOATCALC_DIALOG AFX_DIALOG_LAYOUT
BEGIN
    0
END


/
//
// String Table
//

STRINGTABLE
BEGIN
    IDS_ABOUTBOX            "关于 FloatCalc(&A)..."
END

#endif    // 中文(简体,中国) resources
/



#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#include "res\FloatCalc.rc2"  // 非 Microsoft Visual C++ 编辑的资源
#include "l.CHS\afxres.rc"      // 标准组件
#if !defined(_AFXDLL)
#include "l.CHS\afxribbon.rc"   // MFC 功能区和控制条资源
#endif
#endif

/
#endif    // not APSTUDIO_INVOKED


END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/395221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

克服数字化三重担忧,从构建身份基础设施开始

随着数字化转型和云迁移的逐步推进&#xff0c;IT 架构逐渐复杂化&#xff0c;基础设施和运营&#xff08;I&O&#xff09;领域已出现了许多创新和新兴技术&#xff0c;例如云计算、边缘计算、云原生、容器技术和智能运维&#xff08;AIOps&#xff09;。这些创新和新技术不…

TCP流量控制+拥塞控制

流量控制&#xff1a; 目标&#xff1a;流量控制主要解决的是发送方和接收方之间处理能力的不匹配问题。它的目的是确保发送方不会发送数据过快&#xff0c;以至于接收方无法及时接收并处理这些数据&#xff0c;从而避免数据包在网络中堆积和丢失。实现方式&#xff1a;在TCP协…

挑战杯 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

Vue3快速上手(八) toRefs和toRef的用法

顾名思义&#xff0c;toRef 就是将其转换为ref的一种实现。详细请看&#xff1a; 一、toRef 1.1 示例 <script langts setup name"toRefsAndtoRef"> // 引入reactive,toRef import { reactive, toRef } from vue // reactive包裹的数据即为响应式对象 let p…

UE蓝图 Cast节点和源码

系列文章目录 UE蓝图 Cast节点和源码 文章目录 系列文章目录Cast节点功能一、Cast节点用法二、Cast节点使用场景三、Cast节点实现步骤四、Cast节点源码 Cast节点功能 在Unreal Engine&#xff08;UE&#xff09;中&#xff0c;Cast节点是一种蓝图系统中的节点&#xff0c;用于…

如何高效利用FMEA,FMEA实施流程有哪些——SunFMEA软件系统

FMEA作为是一种预防性的质量工具&#xff0c;用于识别、评估和解决潜在的设计和过程故障模式。通过FMEA的实施&#xff0c;可以在产品或过程的开发阶段发现并解决潜在问题&#xff0c;从而减少产品或过程的故障风险。如何高效利用FMEA呢&#xff0c;接下来SunFMEA软件和大家一起…

kali虚拟机桥接模式快速设置

第一步&#xff1a;配置 IP、掩码、网关 vim /etc/network/interfaces第二步&#xff1a;配置 DNS&#xff1a; vi /etc/resolv.conf第三步&#xff1a;重启网卡 service networking restart如果还不行建议重启一下虚拟机

CCF-A类MobiCom历年高引论文集免费放送!

MobiCom 高引论文集 MobiCom(International Conference On Mobile Computing And Networking )会议是无线网络和移动计算领域的重要盛会&#xff0c;对推动该领域发展起着积极的推动作用&#xff01;贴心的会议之眼已经免费为大家带来30篇高质量的MobiCom被广泛引用论文&#x…

Sora 和之前 Runway 在架构上的区别

问&#xff1a;Sora 和之前 Runway 那些在架构上有啥区别呢&#xff1f; 答&#xff1a;简单来说 Runway 是基于扩散模型&#xff08;Diffusion Model&#xff09;的&#xff0c;而 Sora 是基于 Diffusion Transformer。 Runway、Stable Diffusion 是基于扩散模型&#xff08…

JavaScript中延迟加载的方式有哪些

在web前端开发中&#xff0c;性能优化一直是一个非常重要的话题。当我们开发一个页面时&#xff0c;为了提高用户的体验和页面加载速度&#xff0c;我们往往需要采用一些延迟加载的技术。JavaScript中延迟加载的方式有很多种&#xff0c;下面我将为大家详细介绍几种常用的方式。…

Fisher-Yates乱序算法

乱序算法 public class Test07 {public static void main(String[] args) {//乱序算法int[] arr {1,2,3,4,5,6,7,8};//逆序遍历 且这个随机的下标不能使要交换的元素的本身for(int i arr.length-1;i>0;i--){//产生一个随机的下标与当前元素进行交换int index (int)(Math…

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统

简介 使用工具&#xff1a; Python&#xff0c;PyQt &#xff0c;Flask &#xff0c;MySQL 注&#xff1a;制作重点在网页端&#xff0c;因此网页端的功能更全 WEB界面展示: 系统登录分为管理员&#xff0c;老师&#xff0c;学生3部分 管理员统一管理所有的账号信息以及登录…

Java实现一个栈

目录 概念与结构 实现一个栈 创建一个栈类 实现栈的基本操作 测试栈类 概念与结构 概念与结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元…

算法练习-分割等和子集(思路+流程图+代码)

难度参考 难度&#xff1a;困难 分类&#xff1a;动态规划 难度与分类由我所参与的培训课程提供&#xff0c;但需 要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0…

[AIGC] 深入理解 Java 虚拟机(JVM)的垃圾回收

深入理解 Java 虚拟机&#xff08;JVM&#xff09;的垃圾回收 一、是什么 Java 虚拟机&#xff08;JVM&#xff09;的垃圾回收&#xff08;Garbage Collection&#xff09;是一种自动内存管理机制&#xff0c;用于释放不再使用的对象所占用的内存空间。垃圾回收的目标是回收那…

【HTML】SVG实现炫酷的描边动画

前沿 今天闲来无事&#xff0c;看到Antfu大佬的个性签名&#xff0c;觉得还是非常炫酷的&#xff0c;于是也想要搞一个自己的个性签名用来装饰自己的门面&#xff0c;不过由于手写的签名太丑了&#xff0c;遂放弃。于是尝试理解原理&#xff0c;深入研究此等密法&#xff0c;终…

如何录制视频?让你的录制过程更加顺畅!

录制视频是现代社会不可或缺的技能之一&#xff0c;无论是工作还是生活&#xff0c;我们都需要学会如何录制和编辑视频&#xff0c;可是您知道如何录制视频吗&#xff1f;本文将介绍两种录制视频的方法&#xff0c;这两种方法各有特点&#xff0c;可以满足不同用户的需求。 如何…

Windows制作Ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在Windows10中制作Ubuntu22.04的U盘启动盘 一、下载Ubuntu22.04的iso文件 在浏览器中输入https://ubuntu.com去Ubuntu官网下载Ubuntu22.04的iso文件 二、下载Ultraiso 在浏览器中输入https://www.ultraiso.com进入ultraiso官网 点击FREE TRIAL&a…

腾讯云4核8G12M服务器支持多少人在线?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

最高频率的图形工作站应用配置推荐

如果你的计算机速度太慢&#xff0c;想买一台最快的图形工作站&#xff0c;大幅提高你的工作效率&#xff0c;从专业角度&#xff0c;这种图形工作站不是唯一的&#xff0c;原因是&#xff0c;不同的应用、不同的算法、不同计算规模&#xff0c;硬件配置有很大差异&#xff0c;…