CTF零宽字符隐写:从原理到实战的逆向思维与信息隐藏技术

Cocos2D-X 3.17.2 安装配置 网上关于cocos2d-x的安装教程有很多,但是都是旧版本的,我找了很多资料都无法创建proj.android-studio。后来发现是新版本的软件对安卓平台进行合并,只有proj.android文件,使用Android studio编写。 一、安装准备: JDK –->> Java SE Development Kit 8u202 Android studio --&gt... 阅读详情

1. 从“签到”到“隐写”:一次CTF赛题的逆向思维

刚接触CTF(Capture The Flag,夺旗赛)的朋友,看到“签到题”三个字,第一反应往往是“白送分”。确实,在大多数比赛中,签到题旨在让选手快速上手,熟悉平台,通常是一个简单的网页交互、一个基础的编码转换,或者一句藏在源码里的“flag”。但2021年“网刃杯”的这道签到题,却给所有轻敌的选手上了一课。它把“签到”这个动作,藏在了“零宽字符隐写”这个看似冷门的技术背后。

这道题的核心,是考察选手对信息隐藏,特别是文本层隐写的敏感度。它不像传统的Misc(杂项)题目那样,给你一张图片让你用Stegsolve去分析LSB(最低有效位),也不像Web题那样需要你去爆破目录或执行命令。它给你的,很可能就是一段看起来“干干净净”的文本,甚至可能直接显示在题目描述框里。你复制、粘贴,提交,却发现不对。秘密,就藏在你肉眼看不见的地方——零宽字符。

零宽字符是什么?简单说,它们是Unicode字符集中一些没有实际宽度、不会在屏幕上显示出来的特殊字符。就像幽灵一样,存在于文本流中,可以被复制、粘贴,但你看不见它。常见的零宽字符包括:

  • 零宽空格 (U+200B):用于单词换行,但不显示空格。
  • 零宽非连接符 (U+200C):用于控制字符连接。
  • 零宽连接符 (U+200D):用于组合字符(如emoji)。
  • 左至右标记 (U+200E) / 右至左标记 (U+200F):控制文本方向。

在CTF中,出题人利用这些“隐形墨水”,将flag的二进制信息(0和1)编码到零宽字符的排列组合中。例如,用零宽空格代表0,零宽非连接符代表1,或者用更复杂的组合来增加识别难度。解题者的任务,就是“看见”这些看不见的字符,并破译其编码规则。

所以,这道“签到题”实际上是一个思维转换的测试:它要求你跳出“签到即简单”的定式思维,立刻进入“任何给定数据都可能包含隐藏信息”的CTF解题状态。对于新手,这是一个绝佳的学习案例,让你认识到CTF世界的“套路”之深;对于有经验的选手,这是一个提醒,无论题目多么简单,基本的检查步骤(查看源码、检查网络请求、分析数据本身)一步都不能少。

2. 零宽字符隐写的原理与常见编码方式

要解开这道题,我们必须先弄明白,信息是如何被“塞进”这些看不见的字符里的。其核心原理是利用零宽字符的不可见性,在正常的文本载体(如题目描述、文本框内容、甚至文件名)中,嵌入一段由零宽字符序列组成的“密文”。这段密文本身,按照某种预设的编码规则,对应着原始的flag信息。

2.1 二进制编码:最基础的映射

最直接的方式是二进制映射。因为计算机中所有信息最终都是0和1,而零宽字符有多种类型,正好可以用来代表不同的比特。

  • 单字符映射 :这是最简单的一种。例如,规定在隐藏信息中, 零宽空格 (U+200B) 代表二进制 0 , 零宽非连接符 (U+200C) 代表二进制 1 。那么,flag字符串首先被转换成二进制(通常是ASCII或UTF-8编码),然后每一位二进制数被替换成对应的零宽字符。
    • 举例 :假设flag是 flag{A} 。字符 A 的ASCII码是65,二进制是 01000001 。那么,对应的零宽字符序列可能就是(这里用 [ZWSP] 代表零宽空格, [ZWNJ] 代表零宽非连接符): [ZWSP][ZWNJ][ZWSP][ZWSP][ZWSP][ZWSP][ZWSP][ZWNJ]
  • 多字符组合映射 :为了增加复杂度或容错,可能会使用两个或更多零宽字符的组合来编码一个比特或一个字节。例如, [ZWSP][ZWNJ] 代表 0 , [ZWNJ][ZWSP] 代表 1 。

2.2 Unicode编码直接隐藏

另一种思路更“粗暴”一些:直接将flag的每个字符的Unicode码点,用零宽字符“包裹”起来,或者插入到零宽字符序列中。这种方式编码效率可能不高,但迷惑性较强。解题时可能需要尝试将提取出的零宽字符序列直接转换成字节流,再尝试用各种编码(如UTF-8, UTF-16)去解码。

2.3 与现有工具的结合:零宽空间隐写术

在实战和更复杂的题目中,零宽字符隐写常常会借助现有的工具或算法。一个著名的例子是 “零宽空间隐写术” 。这类工具(如一些在线的零宽字符加密网站)提供了一套完整的编码/解码流程:

  1. 加密端 :将你的明文(比如flag)通过特定算法转换成一串零宽字符序列。
  2. 嵌入端 :将这串序列插入到任意一段正常文本的任意位置。
  3. 解密端 :从含隐写的文本中准确提取出零宽字符序列,并通过逆向算法还原出明文。

这类工具使用的算法可能包括简单的替换,也可能包含校验位或简单的加密。对于CTF题,出题人有时会直接使用这些公开的工具进行编码,解题者就需要知道或猜到使用的是哪种工具。

注意 :在实际CTF比赛中,出题人为了增加难度,可能会对上述基础方法进行变种或组合。例如,先对flag进行Base64编码后再做零宽隐写,或者在零宽字符序列中插入随机的干扰零宽字符。这就要求解题者不仅要有工具,还要有分析编码模式的能力。

3. 实战解题:定位、提取与解码零宽字符

理论清楚了,我们来看手把手的操作。假设我们就是2021年网刃杯的参赛者,面对这道签到题。我们的解题链路可以清晰地分为三步:发现异常、提取密文、解码还原。

3.1 第一步:发现“看不见”的字符——定位隐写位置

题目可能以多种形式呈现零宽字符隐写:

  • 网页题目描述 :flag直接藏在题目文字的某个角落。
  • 输入框/文本框 :页面上的某个文本框里预设了一段看似无意义的文字,或者在你提交错误flag后返回的信息中。
  • 文件下载 :提供一个 .txt 或 .md 文件,打开后内容正常,但大小可能略大。
  • 社交工程 :有时甚至藏在平台用户名、队伍名等地方。

如何定位?

  1. 最基础:复制粘贴大法 。将你认为可疑的文本全部复制,粘贴到一个能显示不可见字符的编辑器里。 Notepad++ (搭配 显示所有字符 功能)、 Sublime Text 、 VS Code (可以安装 Zero-width characters 高亮插件)都是绝佳选择。你会看到一些特殊的符号,如 [U+200B] 、 [U+200C] 或小点、箭头等,这些就是零宽字符的可视化表示。
  2. 浏览器开发者工具 。如果隐写在网页上,按F12打开开发者工具,查看相关DOM元素的 textContent 或 innerHTML 。在元素面板中,零宽字符有时会显示为空白,但在代码视图里可以看到其Unicode实体(如 ​ 对应零宽空格)。更直接的方法是,在Console中执行 document.querySelector(‘#可疑元素ID’).textContent.length ,如果长度远大于肉眼可见的字符数,那几乎肯定有隐藏字符。
  3. Python脚本探查 。这是最彻底的方法。将文本保存为文件,用Python读取并检查每个字符的Unicode码点。
    with open('suspicious.txt', 'r', encoding='utf-8') as f:
        text = f.read()
    for i, char in enumerate(text):
        if ord(char) in [0x200B, 0x200C, 0x200D, 0x200E, 0x200F, 0xFEFF]:
            print(f"位置 {i}: 发现零宽字符 U+{ord(char):04X}")
    
    这段代码会遍历文本,打印出所有常见零宽字符的位置和类型。

3.2 第二步:从噪声中分离信号——提取隐写序列

找到零宽字符后,下一步是把它们从正常文本中“抠”出来,形成一个纯净的零宽字符序列。这个序列才是我们需要解码的密文。

  1. 手动提取 :在支持显示零宽字符的编辑器里,你可以直接选中这些特殊的可视化标记,然后复制。但这种方法容易出错,特别是序列很长时。
  2. 脚本提取(推荐) :写一个简单的Python脚本进行过滤。
    def extract_zero_width(text):
        # 定义零宽字符集合
        zw_set = {
            '\u200b', # Zero Width Space
            '\u200c', # Zero Width Non-Joiner
            '\u200d', # Zero Width Joiner
            '\u200e', # Left-to-Right Mark
            '\u200f', # Right-to-Left Mark
            '\ufeff', # Zero Width No-Break Space (BOM)
        }
        # 过滤出所有属于这个集合的字符
        hidden = ''.join([c for c in text if c in zw_set])
        return hidden
    
    # 假设 `full_text` 是包含隐写的完整文本
    hidden_sequence = extract_zero_width(full_text)
    print(f"提取到的隐写序列: {hidden_sequence}")
    print(f"序列长度: {len(hidden_sequence)}")
    
    运行后, hidden_sequence 变量里就是纯的零宽字符串,比如 "\u200b\u200c\u200b\u200b..." 。

3.3 第三步:破译幽灵密码——解码还原Flag

这是最关键也最需要脑洞的一步。我们需要猜测出题人用了哪种编码方式。

  1. 尝试直接转换 :将提取到的零宽字符序列,按照最简单的二进制映射进行转换。例如,假设 \u200b 为 0 , \u200c 为 1 。

    def decode_binary(zw_sequence, zero='\u200b', one='\u200c'):
        # 将零宽字符序列转换为二进制字符串
        binary_str = ''.join(['0' if c == zero else '1' for c in zw_sequence])
        # 将二进制字符串按8位一组分割,转换为字节
        # 注意:二进制字符串长度必须是8的倍数
        if len(binary_str) % 8 != 0:
            print("警告:二进制字符串长度不是8的倍数,可能编码方式有误或需要填充处理。")
            # 可以尝试从末尾或开头补零
            # binary_str = binary_str.ljust((len(binary_str) + 7) // 8 * 8, '0')
        bytes_list = []
        for i in range(0, len(binary_str), 8):
            byte_str = binary_str[i:i+8]
            bytes_list.append(int(byte_str, 2))
        # 尝试用常见编码解码
        try:
            return bytes(bytes_list).decode('utf-8')
        except UnicodeDecodeError:
            try:
                return bytes(bytes_list).decode('ascii')
            except:
                return f"解码失败,原始字节: {bytes_list}"
    
    flag_candidate = decode_binary(hidden_sequence)
    print(f"解码结果: {flag_candidate}")
    

    如果幸运的话,这样就能直接得到 flag{...} 格式的字符串。

  2. 尝试在线工具 :如果直接转换不行,可以将提取出的零宽字符序列( 注意,是纯序列,不要带任何其他字符 )复制,到一些在线的“零宽字符解密”网站去尝试。这些网站通常集成了几种常见编码算法。

  3. 分析模式 :如果以上都失败,就需要更深入地分析序列。计算序列长度,看是否是7或8的倍数(对应ASCII/UTF-8的比特数)。观察序列中是否出现规律性的重复模式,可能对应flag中的特定字符(如 { , } )。也可以尝试不同的零宽字符映射组合(比如交换0和1的代表字符,或者引入第三种字符如 \u200d 作为分隔符)。

  4. 考虑二次编码 :这是CTF中常见的“套路”。解码出来的可能还不是最终flag,而是一串Base64、Hex编码或者莫尔斯电码等。你需要对第一次解码的结果进行再次解码。例如,用二进制映射解出一串像 ZmxhZ3tXZWxjb21lfQ== 这样的字符串,这明显是Base64,再解码一次就能得到 flag{Welcome} 。

4. 举一反三:CTF中信息隐藏的常见套路与防御性检查

通过这道零宽字符签到题,我们可以梳理出一套应对CTF中各类信息隐藏题目的“防御性检查清单”。这套清单能帮助你在未来面对任何可疑数据时,不至于无从下手。

4.1 文本类载体的全面检查点

当题目给出一段文本时,无论它看起来多么普通,都应依次进行以下检查:

  • 查看网页源代码 : Ctrl+U 或右键查看源代码。Flag可能藏在HTML注释 <!-- --> 、JS变量、或者某个标签的属性值里。
  • 检查HTTP响应头 :用浏览器开发者工具的Network面板,查看页面或任何请求的响应头。 X-Flag 、 Flag 、 Secret 等自定义字段,或者 Cookie 、 Location 字段都可能藏有信息。
  • 检查前端代码逻辑 :仔细阅读页面引用的JS文件。Flag可能由一段复杂的JS代码计算得出,或者藏在代码的字符串常量里,甚至是通过异步请求从后端获取的。
  • 分析数据本身 :
    • 零宽字符 :如前所述,复制到高级文本编辑器检查。
    • 不可打印字符 :除了零宽字符,还有制表符、换行符、响铃符等。用 cat -A 命令(Linux)或Python的 repr() 函数可以查看所有字符。
    • 编码转换 :尝试将文本进行各种编码解码。常见的有:
      • Base64 :字符集为A-Z,a-z,0-9,+,/,=,末尾常有等号。
      • Base32 :字符集为A-Z,2-7,=,字母全大写。
      • Hex(十六进制) :由0-9, a-f组成。
      • URL编码 :形式如 %41%42 代表 AB 。
      • HTML实体编码 :形式如 &#65;&#66; 或 &A&B; 。
      • Unicode转义 :形式如 \u0041\u0042 。
      • 莫尔斯电码 :由 . 和 - 组成。
      • 培根密码 :由A/B或a/b组成的五元组。
    • 词频分析/字谜 :对于长文本,可能是藏头诗、藏尾诗,或者每个单词的首字母组合。也可能是简单的替换密码(如凯撒密码、栅栏密码)。

4.2 文件类载体的分析维度

如果题目提供一个文件(如图片、音频、压缩包),检查维度又不同:

  • 文件属性 :在文件系统中查看详细信息,注释、作者、标题等元数据字段可能藏有flag。
  • 文件签名与魔术头 :用 file 命令或 hexdump -C 查看文件头部,确认文件真实类型。一个 .jpg 文件可能实际上是 .png 或 .zip 。
  • 字符串提取 :使用 strings 命令(Linux)或文本编辑器打开二进制文件,搜索 flag{ 、 CTF 、 key 等关键词。
  • Binwalk分析 :对于可能内嵌了其他文件的文件(如图片、PDF),使用 binwalk 工具可以自动分离出内嵌的文件。
  • Steghide/Outguess :如果怀疑是图片隐写,使用 steghide 工具尝试提取信息,通常需要密码,密码有时是空、文件名或简单单词。
  • LSB隐写 :使用 Stegsolve 、 zsteg 等工具分析图片每个颜色通道的最低有效位,查看是否有隐藏的图像或文本。
  • 音频频谱图 :用 Audacity 等软件打开音频文件,查看其频谱图,flag可能以图片形式显示在其中。
  • 视频帧分析 :用 ffmpeg 提取视频的每一帧,然后当作图片隐写来处理。

4.3 网络流量中的蛛丝马迹

在Web题目或PCAP流量包分析题中:

  • 过滤与搜索 :在Wireshark中,使用过滤器(如 http 、 tcp contains “flag” )缩小范围,或在分组详情中直接搜索字符串。
  • 协议分析 :仔细查看HTTP请求/响应体、Cookie、URL参数。FTP、DNS等协议的传输内容也可能被利用。
  • 文件还原 :Wireshark可以导出通过HTTP或FTP传输的文件,对这些文件再进行上述的文件分析。

养成这套系统的检查习惯,不仅能解决零宽字符隐写题,更能应对CTF中绝大多数Misc和Web杂项题目。其核心思想就是: 不信任任何表面数据,认为所有输入都可能是经过编码、加密或隐藏的,然后用系统性的方法去层层剥离伪装。 这道“网刃杯”的签到题,正是这一思想最精炼的入门实践。它告诉你,在CTF的世界里,即使是最简单的“签到”,也可能需要你动用“透视”的能力。

cocos2d-x 2.2.3 CCTextureCache的addImage简单分析 CCTextureCache是用于缓存纹理的类,最常用的就是addImage了,下面简单分析下这部分的daiam 阅读详情

相关推荐

cocos2d-x 2.0.3 升级到 cocos2d-x 3.13

参考文献 https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md

每天一小步 未来一大步 2068

cocos2d-x 3.X版本的资源文件读取位置

  今天在学习FileUtils类的时候,发现了一个3.X版本和旧版本不同的地方:资源文件读取位置。   在旧的版本中,资源文件存放在Resources目录下,读取也在这个目录下。但是新的版本Resources目录仅仅用来存放用,编译后,这些资源文件都会被打包到新的解决方案的目录,比如 ..\proj.win32\Debug.win32 下面。   也就是说,每次编译不仅是生成可执行程序,而且...

weixin_30456039的博客 229

Cocos2d-x 3.2基础射击游戏开发指南

Cocos2d-x 3.2 作为游戏开发领域内的佼佼者,为开发者带来了一种高效、跨平台的解决方案,实现从单一平台到多平台的无缝迁移。本章将带领读者领略 Cocos2d-x 3.2 的主要特性,从安装到开发环境配置的流程。Cocos2d-x 3.2 特性丰富,涵盖图形渲染、音频播放、物理引擎集成、粒子系统等核心游戏开发模块。凭借其开源和免费的特性,Cocos2d-x 吸引了众多游戏开发者使用。开源和免费:鼓励开发者自由使用,贡献力量,促进项目发展。跨平台。

weixin_42452483的博客 1166

Windows平台安装cocos2d-x V3.17.2

Windows平台安装cocos2d-x V3.17.2 1.依赖工具 python 2.7.18:https://www.python.org/downloads/release/python-2718/ cocos 2d-x V3.17.2:https://www.cocos.com/cocos2dx cmake:https://cmake.org/download/ Windows 7及以上【下文使用Windows10进行演示】 VS 2015及以上【此处不特别叙述安装过程,下文使用vs2019进行

田螺姑娘的博客 6459

Cocos2d-x 3 x游戏开发之旅

Cocos2d-x 3 x游戏开发之旅

akdjhf的博客 8211

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 273

从cocos2d-x 3.0 到 cocos2d-x 3.2 引擎升级记录

更改日志:

sonikk的专栏 1万+

【Cocos2d-x】集成wxSqlite3到Cocos2d-x

集成wxSqlite3到Cocos2d-x,并编译到Android、IOS平台

4027

Cocos2d-x 2

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-SLRqiVVq-1711813464998)][外链图片转存中…(img-RSotzExB-1711813464998)][外链图片转存中…(img-O7PXkeyJ-1711813464999)]

2401_83817689的博客 936

保姆级教程:用杰理701N可视化SDK搞定ANC降噪配置(从工具到代码全流程)

本文提供了一份详细的杰理701N可视化SDK配置ANC降噪功能的教程,涵盖从开发环境搭建到代码集成的全流程。通过图形化工具和代码示例,帮助开发者快速掌握ANC参数配置技巧,优化降噪效果,解决常见问题。

weixin_30616969的博客 427

cocos2d-x 2.2.3 通过plist创建sprite的过程简单分析

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("crop.plist");          //利用帧缓存创建精灵     CCSprite* sp = CCSprite::createWithSpriteFrameName("crop1.png");

胡老哈的学习记录 9582

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

weixin_34640289的博客 123

android cocos2d 按钮,从Cocos2d-x2迁移到Cocos2d-x3的过程分享

核心代码迁移相对顺利,大致流程如下:一、创建项目1) cd cocos2d-x-3.0rc0;2) 执行setup.py,设置引擎依赖的环境变量,脚本会将COCOS_CONSOLE_ROOT和ANT_ROOT写入到~/.bash_profile中; 执行source ~/.bash_profile使得环境变量生效;3) 在cocos2d-x-3.0rc0下建立projects目录;4) 利用coc...

weixin_42464317的博客 238

Cocos2d-x3.2下实现 可联动的表格

效果图: 使用方法: setLayoutType(cocos2d::ui::Layout::Type::RELATIVE); auto winSize = Director::getInstance()->getWinSize(); auto tableFormLayout = T

杜甲同学的专栏 3489

从开发到生产:Power APP 的应用和编程实践

一旦您在开发环境中完成了应用程序的开发、调试和测试,就可以将其部署到生产环境中供用户使用。在 Power APP Studio 中,您可以选择将应用程序发布到 Power APP 网关或将其嵌入到其他应用程序中。使用 Power APP Studio 内置的调试工具,您可以逐步执行应用程序并查看变量的值,以确保逻辑的正确性。在上述代码中,我们通过将两个文本输入框(TextInput1 和 TextInput2)中的文本转换为数字,并将它们相加,将结果存储在 Result 变量中。

2301_79326510的博客 1483

【Cocos2d-x】Win7+ vs2012,2010 + Cocos2d-x2.2 配置Cocos2d-X项目-环境

cocos2d-x删除vs2012项目模板(这一步新使用cocos2d-x的不需要) 如果你切换cocos2d-x版本的话, 要将之前版本的vs模板删除掉,方法如下: 进入以下目录(根据自己的vs版本): VS2008: C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects\VC2008Express: C:\Pro

I am Leon - 产品 7981

【Unity URP渲染管线下Shader的自定义物体半透明和投影半透明效果_半透明案例分享】

Unity Shader Graph URP渲染管线下的自定义半透明效果_半透明案例分享

暴走约伯的博客 3274

Cocos2d-x 3.2 Lua项目通过LuaSQLite3使用Sqlite3问题总结

首先说明一下环境 cocos2d-x v3.2 为什么要用这个版本,是因为在项目开始决策的时候我并未处在客户端决策层,因为我是搞服务器的,所以后来只能继续沿用这个版本,至少这个项目是的 Windows 7 64位 Visual Studio 2013 这个开发环境,经过这个需求的考验,让我越来越失望   这里说明一下需求 很简单的程序,不多说,需要有个配置管理的模块,譬如你进行多少关...

panshiqu的专栏 3843

Cocos2d-x 3.2节点类Node详细总结

转载:http://shahdza.blog.51cto.com/2410787/1550288

harbinxxh的专栏 7358

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 327

Cocos2d-x 2 2 3 使用NDK配置编译环境

Cocos2d-x 2 2 3 使用NDK配置编译环境

ytffhew的博客 590

面试官连夜整理:103道AI Agent面试题,答对一半直接加薪50%

维度AutoGPTLangGraphAutoGen控制流LLM 驱动的隐式循环代码层定义的显式状态图对话驱动的自动流转状态存储Prompt 上下文中(易丢失)结构化 State 对象(可持久化)对话历史(自动累积)分支能力依赖 LLM 的文本输出(不稳定)条件边 + 节点路由(确定性)多 Agent 对话自然分支(涌现式)回溯/回滚无原生支持,只能重新开始原生 Checkpoint 支持时间旅行无全局回滚,单 Agent 可重启人机协同仅人工在关键点介入(需要自定义)原生支持。

weixin_35774598的博客 604

Cocos2d-x中2.x和3.x的粒子系统的比较

CCParticleBatchNode和ParticleBatchNode 相似的地方: 继承图: 两个类都继承自Node(v2.x中的CCNode,PS:官网又弄反了)和TextureProtocol(v2.x中的CCTextureProtocol)。 (注意:后面将全部用V3.0的概念,即不会再加入类名的CC前缀) ParticleBatchNode类似于一个批处理节点,它将

huang_hws的专栏 7502

cocos2d-x 中 Sqlite3 事务(Transaction)操作

在sqlite3中,事务是没提炼出一个接口。就只好写到sql语句中,不过倒是不太麻烦。sqlite3_exec ( m_pDB , "begin transaction" , 0 , 0 , & errMsg ); sqlite3_exec ( m_pDB , "commit transaction" , 0 , 0 , & errMsg ); sqlite3_exec ( m_pDB , "

阿修罗道 8667

psd看图工具

pad格式看图工具 各种格式图片 可 查看缩略图

【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用

说明:cocos2d-x版本为 3.4,cocosStudio版本为2.1.5  cocosStudio 我个人目前的认识,以为就是一个界面编辑器。界面通过美工可以排布好,然后把发布的csb和png资源文件,提供给程序员使用。 1 关于 cocosStudio下载安装以及使用 CocosStudio下载地址 http://www.cocos.com/cocos/c

HongHuer的专栏 2万+

Altium Designer 封装库 3D封装库 各类集成3D封装库(各类器件齐全)-解压1.32GB-极限压缩.7z

【Altium Designer】AD3D封装库标准2.4G 天线TypeC 接口+ 电阻+ 电容+ 电感+ 常用芯片 + 74系列芯片 + STC系列芯片 + ST系列芯片 + 电源芯片 + 通讯系列芯片 + 未分类IC+ 晶体管 + 二极管 + 三极管 + MOS管 + 整流桥 + 可控硅+ 声亮原件 + LCD + LED + 蜂鸣器 + 数码管+ 晶振+ 接插件 + 排针 + 排母 + 简易牛角座 + 串口 + XH,VH + PHD + PHB + PH + MX + FPC + HT3.96 + KF2EDGK + KF128 + KF301 + KF350 + KF2510 + KF7620 + KFHB9500 + SH1.0+ 继电器+ 保险丝+ 插座 + 音频插座 + 网络插座 + 天线座 + 纽扣电池座 + 电源插座 + USB type C + SIM Card

上一篇: Milvus 2.6 实战:从零搭建 RAG 知识库的完整链路
下一篇: 从零实现两层BP神经网络:深入理解前向传播与反向传播原理
weixin_30843605
博客等级 码龄11年 125粉丝 894原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值