C语言中ASCII码的0x30 0x31 0x43 0x38 转成 0x01 0xC8的代码
时间: 2024-05-22 20:12:18 浏览: 465
#include <stdio.h>
int main() {
int ascii[4] = {0x30, 0x31, 0x43, 0x38};
int num = ((ascii[0] - 0x30) * 1000) + ((ascii[1] - 0x30) * 100) + ((ascii[2] - 0x40) * 10) + (ascii[3] - 0x30);
printf("0x%02X 0x%02X 0x%02X 0x%02X -> 0x%02X\n", ascii[0], ascii[1], ascii[2], ascii[3], num);
return 0;
}
// Output: 0x30 0x31 0x43 0x38 -> 0x01C8
相关问题
C语言中ASCII码的0x30 0x31 0x43 0x38 转成 0x01 0xC8
ASCII码的0x30 0x31 0x43 0x38 转成 0x01 0xC8 的方法如下:
0x30 对应的十进制数为48,将其转换成二进制数为00110000,去掉最高位0,剩下的6位为011000,将其转换成十进制数为24,即0x18。因此,0x30 对应的十六进制数为 0x18。
0x31 对应的十进制数为49,将其转换成二进制数为00110001,去掉最高位0,剩下的6位为011001,将其转换成十进制数为25,即0x19。因此,0x31 对应的十六进制数为 0x19。
0x43 对应的十进制数为67,将其转换成二进制数为01000011,去掉最高位0,剩下的6位为100011,将其转换成十进制数为35,即0x23。因此,0x43 对应的十六进制数为 0x23。
0x38 对应的十进制数为56,将其转换成二进制数为00111000,去掉最高位0,剩下的6位为011100,将其转换成十进制数为28,即0x1C。因此,0x38 对应的十六进制数为 0x1C。
因此,ASCII码的0x30 0x31 0x43 0x38 转成 0x01 0xC8 的结果为:0x18 0x19 0x23 0x1C 转换成二进制数后,拼接在一起为00011000 00011001 00100011 00011100,再将其转换成十六进制数为 0x01 0xC8。
0x10,0x01,0x00, 0x28,0x01,0x00, 0x99,0x03,0x71,0x02,0xa2, 0x99,0x03,0x71,0x02,0xa3, 0x99,0x03,0x71,0x02,0xa4, 0xb0,0x0b,0x22,0x6b,0x1e,0x89,0x2f,0x39,0x39,0x2f,0x14,0x1f,0x33, 0xb7,0x02,0x6e,0x6e, 0xbf,0x02,0x54,0x54, 0xd7,0x06,0x00,0x0e,0xc7,0x19,0xab,0xab, 0xa3,0x20,0x40,0x03,0x80,0xff,0x44,0x00,0x00,0x00,0x00,0x05,0x00,0x68,0x00,0x0a,0x00,0x45,0x05,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x02,0x6f,0x52,0x00,0x05,0x00,0x00,0xff, 0xa6,0x2c,0x0e,0x00,0x24,0x44,0x35,0x00,0x38,0x00,0x80,0x80,0x00,0x24,0x44,0x36,0x00,0x37,0x00,0x80,0x80,0x02,0xec,0x77,0x33,0x05,0x00,0x06,0x2f,0x5e,0x00,0xac,0x11,0x32,0x06,0x00,0x00,0x2f,0x5e,0x00,0x00,0x06,0x00,0x00,0x00,0x00, 0xa7,0x30,0x19,0x19,0x00,0x64,0x40,0x05,0x14,0x41,0x02,0x06,0x05,0x80,0x80,0x00,0x64,0x40,0x23,0x67,0x03,0x00,0x04,0x00,0x80,0x80,0x00,0x64,0x40,0x4b,0x5a,0x00,0x00,0x02,0x01,0x80,0x80,0x00,0x24,0x40,0x69,0x78,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x44, 0xac,0x25,0x10,0x13,0x12,0x1b,0x09,0x01,0x04,0x1b,0x06,0x02,0x19,0x1b,0x1b,0x1b,0x18,0x1b,0x11,0x0b,0x0a,0x1b,0x08,0x03,0x04,0x1b,0x06,0x00,0x19,0x1b,0x1b,0x1b,0x18,0x1b,0x77,0x67,0x77,0x67,0x00, 0xad,0x07,0xcc,0x40,0x46,0x00,0x06,0x5e,0x2f, 0xe8,0x05,0x30,0x07,0x00,0x9c,0x9c, 0xb2,0x09,0x15,0x11,0x05,0x23,0x59,0x83,0x03,0x2e,0x5a, 0xe7,0x21,0x8b,0x3c,0x00,0x0c,0xf0,0x5d,0x00,0x5d,0x00,0x5d,0x00,0x5d,0x00,0xff,0x00,0x08,0x7b,0x00,0x00,0xc8,0x6a,0x5a,0x08,0x1a,0x3c,0x00,0x91,0x01,0xcc,0x01,0x7f,0xf0,0x22, 0xe9,0x09,0x3c,0x7f,0x08,0x07,0x1a,0x7a,0x22,0x1a,0x33, 0xc8,0x25,0x00,0x00,0x15,0x26,0x44,0x00,0x78,0x03,0xbe,0x06,0x11,0x1c,0x09,0x8a,0x03,0x21,0xd4,0x01,0x11,0x0f,0x22,0x4a,0x0f,0x8f,0x0a,0x32,0xf0,0x0a,0x41,0x0d,0xf3,0x80,0x0d,0xae,0xc5,0x03,0xc4, 0xc9,0x25,0x00,0x00,0x15,0x26,0x44,0x00,0x78,0x03,0xbe,0x06,0x11,0x1c,0x09,0x8a,0x03,0x21,0xd4,0x01,0x11,0x0f,0x22,0x4a,0x0f,0x8f,0x0a,0x32,0xf0,0x0a,0x41,0x0d,0xf3,0x80,0x0d,0xae,0xc5,0x03,0xc4, 0x11,0x01,0x00, 0xfe,0xfe,0x78, 0x29,0x01,0x00, 0x35,0x01,0x00, 0xfe,0xfe,0x14, 我把以上每一行数据赋值成一个C语言数组 如: 0x10,0x01,0x00, 变为 tmp0[3] = {0x10, 0x01, 0x00}; 转换结果: u8 tmp0[3] = {0x10, 0x01, 0x00}; u8 tmp1[3] = {0x28, 0x01, 0x00}; u8 tmp2[5] = {0x99, 0x03, 0x71, 0x02, 0xa2}; u8 tmp3[5] = {0x99, 0x03, 0x71, 0x02, 0xa3}; u8 tmp4[5] = {0x99, 0x03, 0x71, 0x02, 0xa4}; u8 tmp5[13] = {0xb0, 0x0b, 0x22, 0x6b, 0x1e, 0x89, 0x2f, 0x39, 0x39, 0x2f, 0x14, 0x1f, 0x33}; u8 tmp6[4] = {0xb7, 0x02, 0x6e, 0x6e}; u8 tmp7[4] = {0xbf, 0x02, 0x54, 0x54}; u8 tmp8[8] = {0xd7, 0x06, 0x00, 0x0e, 0xc7, 0x19, 0xab, 0xab}; u8 tmp9[42] = {0xa3, 0x20, 0x40, 0x03, 0x80, 0xff, 0x44, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x68, 0x00, 0x0a, 0x00, 0x45, 0x05, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x6f, 0x52, 0x00, 0x05, 0x00, 0x00, 0xff}; u8 tmp10[52] = {0xa6, 0x2c, 0x0e, 0x00, 0x24, 0x44, 0x35, 0x00, 0x38, 0x00, 0x80, 0x80, 0x00, 0x24, 0x44, 0x36, 0x00, 0x37, 0x00, 0x80, 0x80, 0x02, 0xec, 0x77, 0x33, 0x05, 0x00, 0x06, 0x2f, 0x5e, 0x00, 0xac, 0x11, 0x32, 0x06, 0x00, 0x00, 0x2f, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}; u8 tmp11[60] = {0xa7, 0x30, 0x19, 0x19, 0x00, 0x64, 0x40, 0x05, 0x14, 0x41, 0x02, 0x06, 0x05, 0x80, 0x80, 0x00, 0x64, 0x40, 0x23, 0x67, 0x03, 0x00, 0x04, 0x00, 0x80, 0x80, 0x00, 0x64, 0x40, 0x4b, 0x5a, 0x00, 0x00, 0x02, 0x01, 0x80, 0x80, 0x00, 0x24, 0x40, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x44}; u8 tmp12[47] = {0xac, 0x25, 0x10, 0x13, 0x12, 0x1b, 0x09, 0x01, 0x04, 0x1b, 0x06, 0x02, 0x19, 0x1b, 0x1b, 0x1b, 0x18, 0x1b, 0x11, 0x0b, 0x0a, 0x1b, 0x08, 0x03, 0x04, 0x1b, 0x06, 0x00, 0x19, 0x1b, 0x1b, 0x1b, 0x18, 0x1b, 0x77, 0x67, 0x77, 0x67, 0x00}; u8 tmp13[9] = {0xad, 0x07, 0xcc, 0x40, 0x46, 0x00, 0x06, 0x5e, 0x2f}; u8 tmp14[7] = {0xe8, 0x05, 0x30, 0x07, 0x00, 0x9c, 0x9c}; u8 tmp15[11] = {0xb2, 0x09, 0x15, 0x11, 0x05, 0x23, 0x59, 0x83, 0x03, 0x2e, 0x5a}; u8 tmp16[43] = {0xe7, 0x21, 0x8b, 0x3c, 0x00, 0x0c, 0xf0, 0x5d, 0x00, 0x5d, 0x00, 0x5d, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x08, 0x7b, 0x00, 0x00, 0xc8, 0x6a, 0x5a, 0x08, 0x1a, 0x3c, 0x00, 0x91, 0x01, 0xcc, 0x01, 0x7f, 0xf0, 0x22}; u8 tmp17[11] = {0xe9, 0x09, 0x3c, 0x7f, 0x08, 0x07, 0x1a, 0x7a, 0x22, 0x1a, 0x33}; u8 tmp18[47] = {0xc8, 0x25, 0x00, 0x00, 0x15, 0x26, 0x44, 0x00, 0x78, 0x03, 0xbe, 0x06, 0x11, 0x1c, 0x09, 0x8a, 0x03, 0x21, 0xd4, 0x01, 0x11, 0x0f, 0x22, 0x4a, 0x0f, 0x8f, 0x0a, 0x32, 0xf0, 0x0a, 0x41, 0x0d, 0xf3, 0x80, 0x0d, 0xae, 0xc5, 0x03, 0xc4}; u8 tmp19[47] = {0xc9, 0x25, 0x00, 0x00, 0x15, 0x26, 0x44, 0x00, 0x78, 0x03, 0xbe, 0x06, 0x11, 0x1c, 0x09, 0x8a, 0x03, 0x21, 0xd4, 0x01, 0x11, 0x0f, 0x22, 0x4a, 0x0f, 0x8f, 0x0a, 0x32, 0xf0, 0x0a, 0x41, 0x0d, 0xf3, 0x80, 0x0d, 0xae, 0xc5, 0x03, 0xc4}; u8 tmp20[3] = {0x11, 0x01, 0x00}; u8 tmp21[3] = {0xfe, 0xfe, 0x78}; u8 tmp22[3] = {0x29, 0x01, 0x00}; u8 tmp23[3] = {0x35, 0x01, 0x00}; u8 tmp24[3] = {0xfe, 0xfe, 0x14}; 请帮我核对一下转换的对不对
### C语言数组定义与原始十六进制数据一致性验证
在C语言中,如果要验证一个数组是否与其原始十六进制数据一致,可以通过逐位比较来完成。以下是基于提供的代码片段和逻辑进行的一致性验证方法。
#### 验证过程
假设有一个十六进制数组 `uint8_t rcvData[]` 和其对应的字符串表示形式。为了验证它们之间的一致性,可以按照以下方式进行:
1. **将十六进制数组转换为字符串**
使用已有的函数 `HexToAsciiStr()` 将十六进制数组转换为其 ASCII 字符串表示形式[^1]。
2. **逆向操作:从字符串还原十六进制数组**
编写一个新的函数用于将字符串重新解析回十六进制数组。这一步骤通过逐一读取字符并将其转换为相应的十六进制数值实现[^2]。
3. **对比两个数组的内容**
比较原始的十六进制数组与通过逆向操作得到的新数组是否完全相同。如果不相同,则说明存在错误;否则认为二者是一致的。
#### 示例代码
下面提供了一组完整的示例代码以供参考:
```c
#include <stdio.h>
#include <stdint.h>
// 定义 HexToAscii 函数
uint8_t HexToAscii(uint8_t c) {
if (c > 9){
return (c + 55); // 转换高四位或低四位大于9的部分至'A'~'F'
}
else{
return (c + 48); // 转换高四位或低四位小于等于9的部分至'0'~'9'
}
}
// 十六进制数组转ASCII字符串
uint8_t* HexToAsciiStr(uint8_t rcvData[], int len) {
uint8_t temp;
static uint8_t data[32] = {0};
for(int i = 0; i < len; i++) {
temp = rcvData[i] & 0xf0;
*(data + i * 3) = HexToAscii(temp >> 4);
temp = rcvData[i] & 0x0f;
*(data + i * 3 + 1) = HexToAscii(temp);
*(data + i * 3 + 2) = ' ';
}
return data;
}
// ASCII字符串转十六进制数组
void AsciiStrToHex(const char str[], uint8_t result[], size_t maxLen) {
const char *p = str;
while (*p && maxLen--) {
char highNibble = *p++;
char lowNibble = *p++;
if (!highNibble || !lowNibble) break;
p++; // 跳过空格
result[maxLen] = ((HexChar(highNibble) << 4) | HexChar(lowNibble));
}
}
char HexChar(char c) {
if((c >= '0') && (c <= '9')) return c - '0';
else if((c >= 'A') && (c <= 'F')) return c - 'A' + 10;
else if((c >= 'a') && (c <= 'f')) return c - 'a' + 10;
else return 0x10;
}
int main() {
uint8_t rcvData[64] = {0x12, 0x34}; // 原始十六进制数据
uint8_t convertedBack[64]; // 存储逆向转换后的数据
// 步骤一:将rcvData转换为字符串
uint8_t *hexString = HexToAsciiStr(rcvData, sizeof(rcvData)/sizeof(rcvData[0]));
printf("Converted string: %s\n", hexString);
// 步骤二:将字符串再转换回来
AsciiStrToHex(hexString, convertedBack, sizeof(convertedBack));
// 步骤三:验证两者的相等性
int consistent = 1;
for(size_t i=0;i<sizeof(rcvData)/sizeof(rcvData[0]);i++) {
if(rcvData[i]!=convertedBack[i]) {
consistent = 0;
break;
}
}
if(consistent) {
printf("The original array and the re-converted one are identical.\n");
} else {
printf("There exists inconsistency between arrays!\n");
}
return 0;
}
```
以上代码实现了双向转换以及最终的数据校验功能[^1][^2]。
---
阅读全文
相关推荐














