hex_string_to_hex.c

本文介绍了如何将十六进制字符串转换为对应的数值,并通过示例代码演示了实现过程。

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

输入:一串16进制的字串

输出:由字串转换出来的16进制数值

例如 "E5BC35" -->0xe5,0xbc,0x35

/********************************************************************
	created:	2012/02/21
	filename: 	hex_string_to_hex.c
	author:		
	
	purpose:	
*********************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

//-------------------------------------------------------------------

static int oneHexCharToHex(char h)
{
	int x = 0;
	if (isdigit(h)) {
		x = h - '0';
	} else if (isupper(h)) {
		x = h - 'A' + 10;
	} else {
		x = h - 'a' + 10;
	}
	return x;
}

/*Chaneg TEXT HEX such as E5BC35 to 
* E5BC35 -->0xe5,0xbc,0x35
* inStr must >0 otherwise return -1*/
int ChangeTHEX2CPTR(const char * inHexString, char * outHex)
{
	int success = -1;
	int len = 0;
	int i;
	char ch1, ch2;
	do 
	{
		if (NULL == inHexString || NULL == outHex) {
			printf("error: inHexString or outHex is null!\n");
			break;
		}
		len = strlen(inHexString);
		if (len <= 1) {
			printf("error: strlen(inHexString) <= 1!\n");
			break;
		}
		len &= ~1;
		for (i=0; i<len; i+=2) {
			ch1 = inHexString[i];
			ch2 = inHexString[i+1];
			outHex[i/2 + 1] = 0;
			if (isxdigit(ch1) && isxdigit(ch2)) {
				ch1 = oneHexCharToHex(ch1);
				ch2 = oneHexCharToHex(ch2);
				outHex[i/2] = (ch1 << 4) | ch2;
			} else {
				printf("error: %c or %c is not hex digit!\n", ch1, ch2);
				goto exit;
			}
		}
		success = 0;//OK
	} while (0);
exit:
	return success;
}

#define TEST_ChangeTHEX2CPTR
#ifdef TEST_ChangeTHEX2CPTR

static void printf_outHex(const char * outHex)
{
	int len = strlen(outHex);
	int i;
	for (i=0; i<len; i++) {
		printf("0x%x,", outHex[i] & 0xff);
	}
	printf("\n");
}

void test_ChangeTHEX2CPTR(void)
{
	char buffer[256] = {0};

	ChangeTHEX2CPTR("E", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("E5BC35", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("EX4", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("E5B", buffer);
	printf_outHex(buffer);
}
#endif
//-------------------------------------------------------------------


<think>我们正在处理一个Python缩进错误:IndentationError: unexpected indent 这个错误通常表示在代码中出现了意外的缩进。在Python中,缩进用于定义代码块(如函数、循环、条件语句等),因此缩进必须一致且合理。 根据引用[1]和引用[2],这个错误的常见原因包括: 1. 在不需要缩进的地方添加了缩进(例如,在模块层级的代码中使用了缩进) 2. 缩进层次不匹配(例如,同一个代码块中混用了不同数量的空格) 3. 在空行中出现了缩进(虽然空行,但是有空格或制表符) 修复步骤: 1. 检查报错位置:错误信息中会给出文件名和行号(这里是文件"D:\work\zhuanASCII.py"的第2行),定位到该行。 2. 查看第2行以及上下文的缩进情况。 3. 确保代码只在需要缩进的地方(如函数体、循环体等)进行缩进,并且缩进量一致(通常为4个空格)。 具体到用户提供的错误信息: File "D:\work\zhuanASCII.py", line 2 def hex_to_ascii(hex_string): IndentationError: unexpected indent 这个错误表明第2行的函数定义`def hex_to_ascii(hex_string):`前面有不应该出现的缩进。 可能的原因和解决方案: 1. 第1行可能有未闭合的括号、引号等,导致第2行被错误地包含在前一行的语句中。但这里第1行是什么我们不知道,但通常函数定义应该在模块层级(即没有缩进)。 2. 第2行前面多出了空格或制表符。解决方法是删除这些多余的缩进,让函数定义顶格写。 因此,我们需要检查第1行和第2行的代码。假设第1行是正常的(比如是导入语句或注释),那么第2行应该是没有缩进的。如果第2行前面有空格或制表符,就删除它们。 示例: 错误代码: ```python import sys def hex_to_ascii(hex_string): # 这里出现了意外的缩进 ... ``` 正确代码: ```python import sys def hex_to_ascii(hex_string): # 函数定义顶格写 ... ``` 此外,还要检查第1行是否完整结束。如果第1行是一个长语句,比如一个未闭合的括号,那么解释器会认为第2行是同一语句的继续,这时第2行就不应该缩进。但这种情况通常不会导致“unexpected indent”,而是其他错误。不过,为了安全,也要检查第1行。 高级技巧: - 使用编辑器显示空白字符的功能,查看是否有隐藏的空格或制表符。 - 使用自动格式化工具(如autopep8, black)来格式化整个文件。 扩展建议: - 在编辑器中设置将制表符换为空格,并设置缩进为4个空格,以避免混用空格和制表符。 总结:修复该错误的方法是确保函数定义(def)前面没有缩进,除非它是在另一个代码块内部(比如在另一个函数中或类中)。但根据错误信息,这个函数应该是模块层级的,所以应该顶格写。 下面我们给出一个修复后的代码示例(假设整个文件):</think>### 修复 Python 的 IndentationError: unexpected indent 错误 `IndentationError: unexpected indent` 是 Python 中最常见的缩进错误,表示代码中出现了意外的缩进。以下是详细的修复步骤和解决方案: #### 🔧 1. **检查并修复错误行** 根据错误提示 `File "D:\work\zhuanASCII.py", line 2`: - 定位到第 2 行代码:`def hex_to_ascii(hex_string):` - 确保函数定义前没有多余缩进(Python 函数定义应顶格写) ```python # 错误示例(函数前有空格) def hex_to_ascii(hex_string): # 意外的缩进导致错误 ... # 正确示例(顶格写) def hex_to_ascii(hex_string): # ✅ 无缩进 ... ``` #### 🛠 2. **常见修复方法** | 问题类型 | 错误示例 | 修复方案 | |---------|---------|---------| | **函数/类定义前有缩进** | `···def my_func():` | 删除定义前的所有空格 | | **混用制表符和空格** | 第1行:4空格<br>第2行:1制表符 | 统一使用4空格 | | **空行有缩进** | `···`(空行但有空格) | 删除空行中的空格 | | **代码块内缩进不一致** | `··print()`<br>`····return` | 统一为4空格缩进 | #### 🧰 3. **高级修复工具** 1. **显示隐藏字符**(VS Code) - 按 `Ctrl+Shift+P` → 输入 "Toggle Render Whitespace" - 空格显示为`·`,制表符显示为`→` ![VS Code显示空白字符](https://i.imgur.com/3WlXk9L.png) 2. **自动格式化工具** ```bash # 安装格式化工具 pip install autopep8 # 修复文件缩进 autopep8 --in-place --aggressive D:\work\zhuanASCII.py ``` #### 🧩 4. **完整修复示例** ```python # 修复前(错误代码) import sys def hex_to_ascii(hex_string): # ❌ 第2行意外缩进 result = "" for i in range(0, len(hex_string), 2): hex_byte = hex_string[i:i+2] dec_char = int(hex_byte, 16) # ❌ 意外缩进 result += chr(dec_char) return result # 修复后(正确代码) import sys def hex_to_ascii(hex_string): # ✅ 顶格定义 result = "" for i in range(0, len(hex_string), 2): hex_byte = hex_string[i:i+2] dec_char = int(hex_byte, 16) # ✅ 统一4空格缩进 result += chr(dec_char) return result ``` #### 💡 5. **预防措施** 1. **编辑器配置**: - VS Code:设置 `"editor.insertSpaces": true` 和 `"editor.tabSize": 4` - PyCharm:设置 `Editor → Code Style → Python → Use tab character`(取消勾选) 2. **编码规范**: - 始终使用**4个空格**作为缩进单位 - 避免在空行保留缩进 - 使用 `Ctrl+K Ctrl+F`(VS Code)或 `Ctrl+Alt+L`(PyCharm)自动格式化 > 缩进错误本质是**语法错误**而非逻辑错误,Python 要求代码块通过缩进明确边界[^1]。统一使用4空格可避免99%的缩进问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值