GIF格式的介绍,有空准备翻译一下:What's In A GIF - Bit by Byte

2026.06.15+细节判断+郭熙+(笔记)(郭熙言语高分“十二计”).pdf 立即下载

原文地址:http://matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp


Project: What's In A GIF - Bit by Byte

We sill start off by walking though the different parts of a GIF file. (The information on this page is primarily drawn from the W3C GIF89a specification.) A GIF file is made up of a bunch of different "blocks" of data. The following diagram shows all of the different types of blocks and where they belong in the file. The file starts at the left and works it's way right. At each branch you may go one way or the other. The large "middle" section can be repeated as many times as needed. (Technically, it may also be omitted completely but i can't imagine what good a GIF file with no image data would be.)

GIF file stream diagram

I'll show you what these blocks looks like by walking through a sample GIF file. You can see the sample file and its corresponding bytes below.

Actual Size

sample gif, actual size
(10x10)

Enlarged

sample gif, enlarged
(100x100)

Bytes

47 49 46 38 39 61 0A 00 0A 00 91 00 00 FF FF FF FF 00 00 00 00 FF 00 0000 2C 00 00 00 00 0A 00 0A 00 00 02 16 8C 2D 99 87 2A 1C DC 33 A0 02 75EC 95 FA A8 DE 60 8C 04 91 4C 01 00 3B

Note that not all blocks are represented in this sample file. I will provide samples of missing blocks where appropriate. The different types of blocks include: header, logical screen descriptor, global color table, graphics control extension, image descriptor, local color table, image data, plain text extension, application extension, comment extension, and trailer. Let's get started with the first block!

Header Block

From Sample File: 47 49 46 38 39 61

All GIF files must start with a header block. The header takes up the first six bytes of the file. These bytes should all correspond to ASCII character codes. We actually have two pieces of information here. The first three bytes are called the signature. These should always be "GIF" (ie 47="G", 49="I", 46="F"). The next three specify theversion of the specification that was used to encode the image. We'll only be working with "89a" (ie 38="8", 39="9", 61="a"). The only other recognized version string is "87a" but i doubt most people will run into those anymore.

GIF header block layout

Logical Screen Descriptor

From Sample File: 0A 00 0A 00 91 00 00

The logical screen descriptor always immediately follows the header. This block tells the decoder how much room this image will take up. It is exactly seven bytes long. It starts with the canvas width. This value can be found in the first two bytes. It's saved in a format called the spec simply calls unsigned. Basically we're looking at a 16-bit, nonnegative integer (0-65,535). As with all the other multi-byte values in the GIF format, the least significant byte is stored first (little-endian format). This means where we would read 0A 00 from the byte stream, we would normally write it as 000A which is the same as 10. Thus the width of our sample image is 10 pixels. As a further example 255 would be stored as FF 00 but 256 would be 00 01 . As you might expect, the canvas height follows. Again, in this sample we can see this value is 0A 00 which is 10.

Next we have a packed byte. That means that this byte actually has multiple values stored in its bits. In this case, the byte 91 can be represented as the binary number10010001. (The built in Windows calculator is actually very useful when converting numbers into hexadecimal and binary formats. Be sure it's in "scientific" or "programmer" mode, depending on the version of windows you have.) The first (most-significant) bit is the global color table flag. If it's 0, then there is none. If it's 1, then a global color table will follow. In our sample image, we can see that we will have a global color table (as will usually be the case). The next three bits represent the color resolution. The spec says this value " is the number of bits per primary color available to the original image, minus 1" and "...represents the size of the entire palette from which the colors in the graphic were selected." Because i don't much about what this one does, i'll point you to a more knowledgeable article on bit and color depth. For now 1 seems to work. Note that 001 represents 2 bits/pixel; 111 would represent 8 bits/pixel. The next single bit is the sort flag. If the values is 1, then the colors in the global color table are sorted in order of "decreasing importance," which typically means "decreasing frequency" in the image. This can help the image decoder but is not required. Our value has been left at 0. The last three bits are the size of global color table. Well, that's a lie; it's not the actual size of the table. If this value is N, then the actual table size is 2^(N+1). From our sample file, we get the three bits 001 which is the binary version of 1. Our actual table size would be 2^(1+1) = 2^2 = 4. (We've mentioned the global color table several times with this byte, we will be talking about what it is in the next section.)

The next byte gives us the background color index. This byte is only meaningful if the global color table flag is 1. It represents which color in the global color table (by specifying its index) should be used for pixels whose value is not specified in the image data. If, by some chance, there is no global color table, this byte should be 0.

The last byte of the logical screen descriptor is the pixel aspect ratio. I'm not exactly sure what this value does. Most of the images i've seen have this value set to 0. The spec says that if there was a value specified in this byte, N, the actual ratio used would be (N + 15) / 64 for all N<>0.

GIF logical screen descriptor block layout

Global Color Table

From Sample File: FF FF FF FF 00 00 00 00 FF 00 00 00

We've mentioned the global color table a few times already now lets talk about what it actually is. As you are probably already aware, each GIF has its own color palette. That is, it has a list of all the colors that can be in the image and cannot contain colors that are not in that list. The global color table is where that list of colors is stored. Each color is stored in three bytes. Each of the bytes represents an RGB color value. The first byte is the value for red (0-255), next green, then blue. The size of the global color table is determined by the value in the packed byte of the logical screen descriptor. As we mentioned before, if the value from that byte is N, then the actual number of colors stored is 2^(N+1). This means that the global color table will take up 3*2^(N+1) bytes in the stream.

Size In Logical
Screen Desc
Number Of
Colors
Byte
Length
026
1412
2824
31648
43296
564192
6128384
7256768

Or sample file has a global color table size of 1. This means it holds 2^(1+1)=2^2=4 colors. We can see that it takes up 12, (3*4), bytes as expected. We read the bytes three at a time to get each of the colors. The first color is #FFFFFF (white). This value is given an index of 0. The second color is #FF0000 (red). The color with an index value of 2 is #0000FF (blue). The last color is #000000 (black). The index numbers will be important when we decode the actual image data.

Note that this block is labeled as "optional." Not every GIF has to specify a global color table. However, if the global color table flag is set to 1 in the logical screen descriptor block, the color table is then required to immediately follow that block.

GIF global color table block layout

Graphics Control Extension

Example (Not in Sample File): 21 F9 04 00 00 00 00 00

The sample image does not contain a graphics control extension. This is not because these blocks are uncommon. Rather they are used frequently to specify transparency settings and control animations. For that reason i will be going into the details of this block in other sections (see Transparency and Animation). In the interest ofthis page being complete, I will at least tell you what the bytes represent.

The first byte is the extension introducer. All extension blocks begin with 21. Next is the graphic control label, F9, which is the value that says this is a graphic control extension. Third up is the total block size in bytes. Next is a packed field. Bits 1-3 are reserved for future use. Bits 4-6 indicate disposal method. The penult bit is the user input flag and the last is the transparent color flag. The delay time value follows in the next two bytes stored in the unsigned format. After that we have the transparent color index byte. Finally we have the block terminator which is always 00.

GIF graphic control extension block layout

Image Descriptor

From Sample File: 2C 00 00 00 00 0A 00 0A 00 00

A single GIF file may contain multiple images (useful when creating animated images). Each image begins with an image descriptor block. This block is exactly 10 bytes long.

The first byte is the image separator. Every image descriptor begins with the value 2C. The next 8 bytes represent the location and size of the following image. An image in the stream may not necessarily take up the entire canvas size defined by the logical screen descriptor. Therefore, the image descriptor specifies the image left position and image top position of where the image should begin on the canvas. Next it specifies the image width and image height. Each of these values is in the two-byte, unsigned format. Our sample image indicates that the image starts at (0,0) and is 10 pixels wide by 10 pixels tall. (This image does take up the whole canvas size.)

The last byte is another packed field. In our sample file this byte is 0 so all of the sub-values will be zero. The first (most significant) bit in the byte is the local color table flag. Setting this flag to 1 allows you to specify that the image data that follows uses a different color table than the global color table. (More information on the local color table follows.) The second bit is the interlace flag.

GIF image descriptor block layout

Local Color Table

The local color table looks identical to the global color table. The local color table would always immediately follow an image descriptor but will only be there if the local color table flag is set to 1. It is effective only for the block of image data that immediately follows it. If no local color table is specified, the global color table is used for the following image data.

The size of the local color table can be calculated by the value given in the image descriptor. Just like with the global color table, if the image descriptor specifies a size of N, the color table will contain 2^(N+1) colors and will take up 3*2^(N+1) bytes. The colors are specified in RGB value triplets.

Image Data

From Sample File: 02 16 8C 2D 99 87 2A 1C DC 33 A0 02 75 EC 95 FA A8 DE 60 8C 04 91 4C 01 00

Finally we get to the actual image data. The image data is composed of a series of output codes which tell the decoder which colors to spit out to the canvas. These codes are combined into the bytes that make up the block. I've set an whole other section on decoding these output code into an image (see LZW Image Data). On this page i'm just going to tell you how to determine how long the block will be.

The first byte of this block is the LZW minimum code size. This value is used to decode the compressed output codes. (Again, see the section on LZW compression to see how this works.) The rest of the bytes represent data sub-blocks. Data sub-blocks are are groups of 1 - 256 bytes. The first byte in the sub-block tells you how many bytes of actual data follow. This can be a value from 0 (00) it 255 (FF). After you've read those bytes, the next byte you read will tell you now many more bytes of data follow that one. You continue to read until you reach a sub-block that says that zero bytes follow.

You can see our sample file has a LZW minimum code size of 2. The next byte tells us that 22 bytes of data follow it (16 hex = 22). After we've read those 22 bytes, we see the next value is 0. This means that no bytes follow and we have read all the data in this block.

GIF image data block layout

Plain Text Extension

Example (Not in Sample File): 21 01 0C 00 00 00 00 64 00 64 00 14 14 01 00 0B 68 65 6C 6C 6F 20 77 6F 72 6C 64 00

Oddly enough the spec allows you to specify text which you wish to have rendered on the image. I followed the spec to see if any application would understand this command; but IE, FireFox, and Photoshop all failed to render the text. Rather than explaining all the bytes, i'll tell you how to recognize this block and skip over it

The block begins with an extension introducer as all extension block types do. This value is always 21. The next byte is the plain text label. This value of 01 is used to distinguish plain text extensions from all other extensions. The next byte is the block size. This tells you how many bytes there are until the actual text data begins, or in other words, how many bytes you can now skip. The byte value will probably be 0C which means you should jump down 12 bytes. The text that follows is encoded in data sub-blocks (see Image Data to see how these sub-blocks are formed). The block ends when you reach a sub-block of length 0.

Application Extension

Example (Not in Sample File): 21 FF 0B 4E 45 54 53 43 41 50 45 32 2E 30 03 01 05 00 00

The spec allows for application specific information to be embedded in the GIF file itself. The only reference to could find to application extensions was the NETSCAPE2.0extension which is used to loop an animated GIF file. I'll go into more detail on looping in when we talk about animation.

Like with all extensions, we start with 21 which is the extension introducer. Next is the extension label which for application extensions is FF. The next value is theblock size which tells you how many bytes there are before the actual application data begins. This byte value should be 0B which indicates 11 bytes. These 11 bytes hold two pieces of information. First is the application identifier which takes up the first 8 bytes. These bytes should contain ASCII character codes that identify to which application the extension belongs. In the case of the example above, the application identifier is "NETSCAPE" which is conveniently 8 characters long. The next three bytes are the application authentication code. The spec says these bytes can be used to "authenticate the application identifier." With the NETSCAPE2.0 extension, this value is simply a version number, "2.0", hence the extensions name. What follows is the application data broken into data sub-blocks. Like with the other extensions, the block terminates when you read a sub-block that has zero bytes of data.

Comment Extension

Example (Not in Sample File): 21 FE 09 62 6C 75 65 62 65 72 72 79 00

One last extension type is the comment extension. Yes, you can actually embed comments with in a GIF file. Why you would want to increase the file size with unprintable data, i'm not sure. Perhaps it would be a fun way to pass secret messages.

It's probably no surprise by now that the first byte is the extension introducer which is 21. The next byte is always FE which is the comment label. Then we jump right to data sub-blocks containing ASCII character codes for your comment. As you can see from the example we have one data sub-block that is 9 bytes long. If you translate the character codes you see that the comment is "blueberry." The final byte, 00, indicates a sub-block with zero bytes that follow which let's us know we have reached the end of the block.

GIF comment extension block layout

Trailer

From sample file: 3B

The trailer block indicates when you've hit the end of the file. It is always a byte with a value of 3B.

GIF trailer block layout

Next: LZW Image Data

Now that you know what the basic parts of a GIF file are, let's next focus our attention on how the actual image data is stored and compressed. Continue...



高校技术转移办公室人员在推进成果转化时,如何快速识别高质量专利?.docx 高校技术转移办公室人员在推进成果转化时,如何快速识别高质量专利? 立即下载

相关推荐

政府科技管理者如何推动高校科研成果精准对接产业需求?.docx

政府科技管理者如何推动高校科研成果精准对接产业需求?

Latex中也能展示动态图?

技术背景 在学术领域,很多文档是用Latex做的,甚至有很多人用Latex Beamer来做PPT演示文稿。虽然在易用性和美观等角度来说,Latex Beamer很大程度上不如PowerPoint,但是Beamer这种浓厚的学术色彩还是受到了很多人的喜好。但是我们知道Latex生成的文档一般是用pdf格式来存储的,如果放一个gif动态图进去,就可能会变成一个静态图,那就没办法展示整个动态的过程了...

Dechin的博客 2174

Python全栈入门实战:FastAPI+工单台账+Excel导出(含教学手册与源码骨架)

原创教学资源包(VIP专属)。围绕 Python 全栈入门搭建可复现闭环:用 FastAPI 提供工单台账接口,SQLite 落库,原生 HTML/JS 页面完成列表、新增与筛选,再用 openpyxl 导出带中文表头的 Excel。内含中文实战手册与可运行源码骨架,实现均为教学桩,注释标明鉴权、迁移、并发与备份等生产注意点。使用方法:解压后进入 src/ 目录,建议 Python 3.11+ 创建虚拟环境并安装 requirements.txt;先运行 python smoke_test.py 验证创建、列表、更新与导出,再执行 uvicorn app.main:app --reload --host 127.0.0.1 --port 8000,浏览器打开 http://127.0.0.1:8000 即可操作工单并下载 Excel。细节见手册.md 与 src/README_SRC.txt。适合作为成长任务「Python全栈开发资源包」的自制合规 VIP 资源上传。建议售价 9.90 元。数据均为虚构示例,不含刷量、搬运或真实个人信息。

ImageMagick处理gif图片的奇怪问题

为什么80%的码农都做不了架构师?>>> ...

weixin_34343000的博客 471

国央企创新负责人如何实现创新资源的高效配置与协同发展?.docx

国央企创新负责人如何实现创新资源的高效配置与协同发展?

产业园区如何高效对接企业技术需求并提升项目落地率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

GIF File Format Summary

TypeBitmapColors1 to 8 bitCompressionLZWMaximum Image Size64Kx64K pixelsMultiple Images Per FileYesNumerical FormatLittle-endianOriginatorCompuServ

红蚂蚁(RED ANT) 1340

交错并联图腾柱PFC变换器仿真设计(Simulink仿真实现)

内容概要:本文档围绕“交错并联图腾柱PFC变换器”的Simulink仿真实现展开,系统阐述了该高效率功率因数校正(PFC)拓扑的建模、控制策略设计与仿真验证全过程。作为适用于中大功率场合的先进PFC结构,交错并联图腾柱通过降低输入电流纹波、提高功率密度和系统效率,展现出显著优势。文档详细介绍了系统总体架构、主电路参数设计、双闭环控制策略(包括电压外环与电流内环)、PWM调制技术、软启动机制以及仿真结果分析等内容,帮助读者掌握从理论分析到仿真实践的完整开发流程。同时,文档还引入与其他主流变换器拓扑(如LLC、DAB、Vienna整流器等)的对比分析与协同应用场景探讨,体现了其在现代电力电子系统集成化发展中的重要地位。; 适合人群:具备电力电子技术基础知识、熟悉Simulink/Matlab仿真环境,从事电源系统设计、新能源变换器研发等相关工作的研究生、工程师及科研人员(建议具有1年以上相关实践经验)。; 使用场景及目标:① 深入理解交错并联图腾柱PFC变换器的工作原理与高性能控制方法;② 掌握基于Simulink的PFC系统建模与闭环控制器设计流程;③ 通过仿真数据分析系统动态响应与稳态性能,优化控制参数;④ 为后续硬件原型开发提供可靠的理论依据与前期验证手段。; 阅读建议:建议结合文档配套的Simulink仿真模型进行逐步操作,重点聚焦于双闭环控制结构设计与PI参数整定环节,深入理解各模块间的耦合关系。同时,可参考文中提及的Vienna、LLC等其他典型拓扑,开展横向对比研究,全面把握不同类型PFC架构的技术特点与适用边界。对于初学者,建议先夯实Buck/Boost电路基础与PWM控制原理,再进入本主题的深入学习。

What's In A GIF - Bit by Byte

原文:http://matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp          我们将开始漫步GIF文件的不同部分。 (此页上的信息主要是来自W3C的GIF89a规范)。GIF文件是由一堆不同的“块”数据构成。下图显示了所有不同类型的块以及它们在文件中的位置。文件从左边开始按照它的方式向右。在每一个分支,你可以通过一种或其

HOME 689

产业园区运营负责人如何利用AI技术精准识别和推荐适合的科技成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,融合模型预测电流控制(MPC)与电压下垂控制策略,旨在精确模拟和优化储能系统在充放电过程中的能量双向流动特性。该模型完整实现了电流内环的模型预测控制,以提升动态响应速度与控制精度,并结合电压外环的下垂控制机制,有效模拟微电网中多储能单元间的功率自主分配行为,增强系统的冗余性与可扩展性。控制架构设计严谨,兼顾瞬态响应与稳态性能,适用于复杂工况下的系统稳定性分析。文档配套提供参考文献,强化了技术方案的理论支撑与学术可信度,为电力电子与新能源系统领域的研究提供了高质量的仿真验证平台。; 适合人群:面向具备电力电子、自动控制理论或新能源系统等相关专业背景,且正在从事科研或工程开发工作的技术人员,尤其适合熟悉Simulink仿真环境的研究生、电气工程师及高校教师。; 使用场景及目标:①研究储能系统在频繁充放电切换过程中的动态稳定性与响应特性;②验证模型预测控制在高动态电力变换器中的控制性能与鲁棒性;③实现多储能单元并联运行下的下垂控制策略,优化系统功率均分能力;④为微电网、直流配电系统及分布式能源系统提供核心控制算法的仿真验证与优化平台。; 阅读建议:建议读者结合所提供的参考文献深入理解控制策略的数学建模与理论推导,同时在Simulink环境中动手复现模型,重点调试模型预测控制的代价函数权重、预测时域以及下垂控制系数等关键参数,观察其对系统性能的影响,并可进一步拓展至多变换器并联、故障穿越、通信延迟等复杂场景的仿真研究。

gif动态图gif出处_我喜欢GIF的怪异事物

gif.js 生成gifI was recently reminded that I never wrote down all the weird things I learned about the GIF file format when implementing GIF decoding/playback at work last year. (I was reminded of this ...

weixin_26732881的博客 1万+

科技中介服务机构如何借助AI技术降低服务门槛并提升客户粘性.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Http中Content-Type的详解

敬请关注博客,后期不断更新优质博文,谢谢 这里讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息。 1.  Content-Type   MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。  例如: Content-...

阿祥小王子的博客 10万+

高校技术转移办公室人员如何提升成果转化项目的市场匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

基于斜坡补偿的Buck电路峰值电流+电压电流双闭环控制【附说明文档】(Simulink仿真实现)

基于斜坡补偿的Buck电路峰值电流+电压电流双闭环控制【附说明文档】(Simulink仿真实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未聚焦于Plecs或全桥LLC谐振变换器的具体仿真模型,而是罗列了一系列基于Matlab/Simulink和PSIM等工具实现的电力电子、控制系统、信号处理、路径规划及优化算法相关的科研仿真资源。涵盖了LLC谐振变换器、风电光伏储能系统、微电网优化、无人机路径规划、卡尔曼滤波、图像处理、车间调度等多个技术方向,每项研究均标明了实现工具(如Matlab代码、Simulink仿真)及相关方法(如PID控制、遗传算法、神经网络等)。文档末尾提供了网盘链接与公众号信息,旨在为科研人员提供完整的代码、数据与论文复现资源支持。; 适合人群:具备一定科研基础的研究生、高校教师及从事电力电子、自动化、控制工程、人工智能等相关领域的研发人员。; 使用场景及目标:①为电力电子变换器、新能源系统、智能控制等领域提供仿真建模与算法实现参考;②支持科研论文复现、课程设计、项目开发及学术研究中的技术验证与优化;③助力学生与研究人员快速获取成熟代码与模型,提升科研效率。; 其他说明:文档中提及的所有资源可通过指定网盘链接或关注公众号“荔枝科研社”获取,包含Matlab代码、Simulink模型、参考文献及完整论文,适用于需要快速搭建仿真系统或复现实验结果的用户。

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227
上一篇: Debian squeeze 下 Android Froyo 编译过程小结
下一篇: Python 下写的几个排序算法
mutu
博客等级 码龄24年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值