83-Add Binary

本文介绍了一种解决二进制字符串加法的方法。通过逆转输入的二进制字符串,并迭代处理每一位,实现两个二进制数的加法运算。讨论了如何处理进位和不同长度的字符串加法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-67. Add Binary My Submissions QuestionEditorial Solution
Total Accepted: 85904 Total Submissions: 309911 Difficulty: Easy
Given two binary strings, return their sum (also a binary string).

For example,
a = “11”
b = “1”
Return “100”.

题意:二进制加法

class Solution {
public:
    string addBinary(string a, string b) {
        reverse(a.begin(),a.end()); //逆转
        reverse(b.begin(),b.end());
        int na = a.size(),nb = b.size();
        int n = max(na,nb)+1,min_len=min(na,nb);
        string res(n,'0');
        for(int i=0;i<min_len;++i){ 
            int tmp1 = a[i]+b[i]-'0'-'0';//a,b指定位相加和
            int tmp2=res[i]-'0'+tmp1%2;  //加之后加上本身位的值
            res[i]=(tmp2)%2+'0';  //取余
            int tmp=tmp1/2+tmp2/2; //计算下一位的总的进位和
            res[i+1]=tmp%2+'0';   //下一位实际值
            res[i+2]=tmp/2+'0';   //下一位是否产生金进位
        }
        if(na<nb)a=b;
        for(int j=min_len;j<n-1;++j){ //较长者继续相加
            int sum=res[j]-'0'+a[j]-'0';
            res[j]=sum%2+'0';
            res[j+1]=sum/2+'0';
        }
        if(res[n-1]=='0')res = res.substr(0,n-1);
        reverse(res.begin(),res.end()); //为显示正常需要逆转
        return res;
    }
};
<think>我们注意到用户尝试在命令提示符(CMD)中直接运行类似于PyInstaller的参数(如--add-binary),但CMD将这些参数解释为命令,导致错误。 这是因为用户可能误解了PyInstaller命令的用法。正确的做法是:这些参数是给PyInstaller命令的选项,而不是独立的命令。 用户提供的命令片段: --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86/MvCamCtrldll.dll;." \ ...(类似的其他行) 错误信息: '--add-binary' 不是内部或外部命令,也不是可运行的程序或批处理文件。 原因:用户试图在CMD中单独运行`--add-binary`,但正确的做法是将这些参数作为`pyinstaller`命令的一部分。 解决方案: 1. 将所有的`--add-binary`和`--add-data`参数与`pyinstaller`命令一起使用。 2. 注意在Windows CMD中,使用`^`作为行继续符(而不是Linux中的`\`)。 3. 由于路径包含空格和特殊字符,必须使用双引号。 正确命令格式示例: pyinstaller -F ^ --add-binary "路径1;目标位置" ^ --add-binary "路径2;目标位置" ^ --add-data "路径3;目标位置" ^ 你的脚本.py 具体到用户提供的路径,我们可以这样写: pyinstaller -F ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." ^ --add-data "D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" ^ wanzheng.py 注意: - 在CMD中,每行末尾使用`^`表示命令继续到下一行(注意`^`后面不能有空格,除了换行符)。 - 路径中的空格必须用双引号括起来。 - 如果路径包含中文字符,确保CMD的编码是GBK(或者使用英文路径避免问题)。如果遇到中文字符问题,可以尝试将路径改为短路径(8.3格式)或使用英文路径。 另外,如果用户使用的是PowerShell,则行继续符为反引号(`),且命令格式略有不同。 对于PowerShell: pyinstaller -F ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." ` --add-data "D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" ` wanzheng.py 为了避免路径问题,特别是中文路径,我们可以尝试将文件复制到英文路径下再进行打包,或者使用短路径(8.3格式)。在Windows中,可以使用`dir /x`查看短路径。 例如,将"D:\海康"转换为短路径: 1. 打开CMD,输入:`dir /x D:\` 2. 查看"海康"目录对应的短路径名(如:D:\HAIKAN~1) 3. 在命令中使用短路径:`--add-data "D:\HAIKAN~1\...;MvImport"` 但是,更简单的方法是使用相对路径(如果可能)或者将整个项目移到英文路径下。 此外,如果用户需要多次打包,建议编写一个批处理脚本(.bat)或PowerShell脚本(.ps1)来执行打包命令。 这里提供一个批处理脚本示例(save as `build.bat`): @echo off chcp 65001 > nul 2>&1 :: 尝试设置UTF-8编码(不一定所有Windows支持,但有助于显示中文路径) set SCRIPT=wanzheng.py set BINARY1="C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." set BINARY2="C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." set BINARY3="C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." set DATA="D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" pyinstaller -F --add-binary %BINARY1% --add-binary %BINARY2% --add-binary %BINARY3% --add-data %DATA% %SCRIPT% pause 注意:如果路径中包含特殊字符(如&、|等),需要使用转义,但这里主要是空格和中文,用双引号即可。 如果用户遇到编码问题(因为路径中有中文),可以尝试在脚本开头设置代码页(如chcp 65001)以使用UTF-8,但Windows控制台对UTF-8的支持有限。另一种方法是使用英文路径。 最后,如果上述命令仍然因为路径问题失败,可以考虑将所需的文件复制到项目目录中,然后使用相对路径打包。 步骤: 1. 在项目目录下创建sdk文件夹,将三个dll文件复制到sdk文件夹。 2. 将MvImport整个文件夹复制到项目目录下(与脚本同一级)。 3. 打包命令简化为: pyinstaller -F ^ --add-binary "sdk\MvCamCtrldll.dll;." ^ --add-binary "sdk\MvCameraControl.dll;." ^ --add-binary "sdk\MvGenTL.dll;." ^ --add-data "MvImport;MvImport" ^ wanzheng.py 这样避免了绝对路径和特殊字符的问题。 总结:用户遇到的错误是因为在CMD中单独输入了PyInstaller的参数,而没有与`pyinstaller`命令一起使用。需要将参数作为`pyinstaller`命令的一部分。</think>### 问题分析:命令行参数使用错误 您看到的错误信息 `'--add-binary' 不是内部或外部命令` 表明您试图直接在命令提示符中运行 PyInstaller 的参数选项,而不是将其作为 `pyinstaller` 命令的一部分。这是常见的命令行使用错误。 **原因分析**: 1. **命令结构错误**:`--add-binary` 和 `--add-data` 是 PyInstaller 的选项参数,必须跟在 `pyinstaller` 命令后面 2. **行续符错误**:Windows CMD 使用 `^` 作为行续符,而不是 Linux 的 `\` 3. **路径分隔符错误**:Windows 应使用反斜杠 `\` 作为路径分隔符 4. **空格处理不当**:包含空格的路径(如 `Program Files`)需要用双引号包裹 --- ### 解决方案:正确的打包命令格式 #### 在 Windows CMD 中的正确用法 ```cmd pyinstaller -F ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." ^ --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." ^ --add-data "D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" ^ wanzheng.py ``` #### 在 PowerShell 中的正确用法 ```powershell pyinstaller -F ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." ` --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." ` --add-data "D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" ` wanzheng.py ``` #### 替代方案:使用批处理脚本 创建一个 `build.bat` 文件: ```bat @echo off chcp 65001 > nul # 设置UTF-8编码支持中文 set PY_CMD=pyinstaller -F set PY_CMD=%PY_CMD% --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;." set PY_CMD=%PY_CMD% --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;." set PY_CMD=%PY_CMD% --add-binary "C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;." set PY_CMD=%PY_CMD% --add-data "D:\海康\MVS\Development\Samples\Python\MvImport;MvImport" set PY_CMD=%PY_CMD% wanzheng.py echo 执行命令: %PY_CMD% %PY_CMD% pause ``` #### 推荐方案:使用 Python 打包脚本 创建 `build.py` 自动处理: ```python import subprocess import os import sys def run_pyinstaller(): # 准备命令参数 command = [ "pyinstaller", "-F", "--add-binary", r"C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCamCtrldll.dll;.", "--add-binary", r"C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvCameraControl.dll;.", "--add-binary", r"C:\Program Files (x86)\Common Files\MVS\Runtime\Win32_i86\MvGenTL.dll;.", "--add-data", r"D:\海康\MVS\Development\Samples\Python\MvImport;MvImport", "wanzheng.py" ] # 处理中文路径问题 if sys.platform == "win32": # 设置控制台编码为UTF-8 os.system("chcp 65001 > nul") print("执行命令:", " ".join(command)) try: # 运行命令 result = subprocess.run(command, check=True) print("\n打包成功!输出文件在 dist 目录") except subprocess.CalledProcessError as e: print(f"\n打包失败,错误码: {e.returncode}") print("请检查: ") print("1. PyInstaller 是否安装: pip install pyinstaller") print("2. 所有文件路径是否正确") print("3. 是否有文件访问权限") if __name__ == "__main__": run_pyinstaller() ``` ### 路径处理技巧 #### 1. 处理空格问题 ```cmd :: 正确 --add-binary "C:\Program Files (x86)\...\file.dll;." :: 错误(空格导致路径被分割) --add-binary C:\Program Files (x86)\...\file.dll;. ``` #### 2. 处理中文路径问题 ```python # 在Python脚本中添加 os.environ["PYTHONUTF8"] = "1" ``` #### 3. 使用短路径(8.3格式) ```cmd :: 获取短路径 dir /x "D:\海康" :: 使用短路径 --add-data "D:\HAIKAN~1\MVS\...;MvImport" ``` ### 验证打包是否成功 打包完成后,检查生成的可执行文件: ```python # 验证脚本 verify.py import os import sys from PyInstaller.utils.win32.versioninfo import VSVersionInfo def check_executable(): exe_path = os.path.join("dist", "wanzheng.exe") if not os.path.exists(exe_path): print(f"❌ 可执行文件未生成: {exe_path}") return False print(f"✅ 可执行文件已生成: {exe_path}") # 检查文件大小(至少应有几MB) size_mb = os.path.getsize(exe_path) / (1024 * 1024) print(f"文件大小: {size_mb:.2f} MB") if size_mb < 1: print("⚠️ 文件大小异常,可能缺少依赖") return True def check_dependencies(): """检查依赖文件是否包含""" required_files = [ "MvCamCtrldll.dll", "MvCameraControl.dll", "MvGenTL.dll", os.path.join("MvImport", "MvCameraControl_class.py") ] missing = [] for file in required_files: if not os.path.exists(file): missing.append(file) if missing: print("❌ 缺少依赖文件:") for m in missing: print(f" - {m}") return False print("✅ 所有依赖文件存在") return True if __name__ == "__main__": print("=" * 50) print("打包结果验证") print("=" * 50) exe_ok = check_executable() deps_ok = check_dependencies() if exe_ok and deps_ok: print("\n验证通过!可以运行 dist/wanzheng.exe") else: print("\n验证失败,请检查打包命令和依赖文件") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值