C++ 打印十六进制数据

说明

大家可能在做流媒体开发,或者网络相关开发的时候经常需要对数据进行逐个字节的分析,这个时候如果能在日志里面通过二进制,或者十六进制的方式打印出字节的详细内容,这样就能很方便的分析数据了。

这里有个很小的代码片段,可以完成这个功能

需求:std::string可以存放非字符串数据,在调试过程中需要将原始数据按16进制的格式打印出来。

片段

std::string to_hex(unsigned char* data, int len) {
    std::stringstream ss;
    ss << std::uppercase << std::hex << std::setfill('0');
    for (int i = 0; i < len; i++) {
        ss << std::setw(2) << static_cast<unsigned>(data[i]);
    }
    return ss.str();
}
  • std::uppercase:可以将输入转为大写
  • std::hex:将输入按照16进制的方式展示出来
  • std::setfilll(‘0’)当不足要求长度的时候填充’0’来满足长度要求
  • std::setw(2) 两个字节的长度输出

示例

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

std::string to_hex(unsigned char* data, int len) {
    std::stringstream ss;
    ss << std::uppercase << std::hex << std::setfill('0');
    for (int i = 0; i < len; i++) {
        ss << std::setw(2) << static_cast<unsigned>(data[i]);
    }
    return ss.str();
}

int main()
{
  std::string name = "123123";
  std::cout << to_hex((unsigned char*)(name.c_str()), name.size()) << std::endl;
}

output

313233313233

参考资料

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在C语言中,我们可以通过以下步骤将字符串转换为十六进制打印出来。 首先,我们需要将字符串转换为对应的字节序列。这可以通过将每个字符转换为其ASCII码值来实现。例如,字符串"Hello"可以转换为字节序列{72, 101, 108, 108, 111}。 接下来,我们使用循环和sprintf()函数将每个字节转换为两个十六进制数字。sprintf()函数以格式化字符串的形式将数据写入缓冲区中。例如,字节72将转换为字符串"48",其中4和8分别是十六进制数字7和2的ASCII码值。 最后,我们将每个乘以两个十六进制数字的字符以连字符分隔的形式打印出来,以便更清楚地显示十六进制值。以下是完整的代码示例: ```c #include <stdio.h> #include <string.h> void string_to_hex(const char* str) { size_t len = strlen(str); unsigned char bytes[len]; memcpy(bytes, str, len); // 将字符串转换为字节序列 char hex[len*2+1]; for (int i = 0; i < len; i++) { sprintf(&hex[i*2], "%02x", bytes[i]); // 将每个字节转换为两个十六进制数字 } hex[len*2] = '\0'; for (int i = 0; i < len*2; i+=2) { printf("%c%c-", hex[i], hex[i+1]); // 打印十六进制值,以连字符分隔 } printf("\n"); } int main() { char* str = "Hello"; string_to_hex(str); // 打印字符串的十六进制值 return 0; } ``` 当我们运行这个程序时,输出将如下所示: ``` 48-65-6c-6c-6f- ``` 这就是字符串"Hello"的十六进制值。 ### 回答2: 在计算机科学领域中,字符串转十六进制是一种常见的操作。它可以将一个普通的文本字符串转换为十六进制数值,并输出到屏幕上进行视觉展示。这样做可以使字符串更加易于处理,也有利于进行网络传输与加密操作。 字符串转十六进制的实现方法有很多种。其中一种常见的方法是使用C语言编写程序。下面是其中的一种示例代码: # include <stdio.h> # include <string.h> void string_to_hex(char* input_string, char* output_string) { size_t input_len = strlen(input_string); for(size_t i = 0; i < input_len; i++) { sprintf(output_string + (i * 2), "%02X", input_string[i]); } } int main() { char input_string[] = "Hello, world!"; char output_string[256] = ""; string_to_hex(input_string, output_string); printf("Input string: %s\n", input_string); printf("Hex output: %s\n", output_string); return 0; } 在这段代码中,我们使用了sprintf()函数将每个字符转换为两位十六进制数,并将其存储在输出的字符串中。同时,我们也计算了输入字符串的长度,以确保在循环中处理每个字符。 对于输入字符串“Hello, world!”,我们可以得到如下结果: Input string: Hello, world! Hex output: 48656C6C6F2C20776F726C6421 可以看到,这个结果就是字符串“Hello, world!”的十六进制表示形式。通过这种方式,我们可以方便地将字符串转换为十六进制,并轻松地输出到屏幕上进行观察和分析。 ### 回答3: 字符串转十六进制可以通过以下步骤实现: 1. 定义一个字符串变量,存储需要转换的字符串。 2. 遍历字符串中的每个字符,将其转换为十六进制数。 3. 将得到的十六进制数存入一个新的字符串变量中。 4. 打印出新的字符串变量,即为字符串转十六进制后的结果。 具体实现可以采用以下代码: ``` Python # 定义需要转换的字符串 str = 'Hello World!' # 定义一个空字符串变量,用于存储转换后的结果 hex_str = '' # 遍历字符串中的每个字符 for char in str: # 将字符转换为十六进制数,并添加到新的字符串变量中 hex_str += hex(ord(char))[2:] + ' ' # 打印出转换后的结果 print(hex_str) ``` 上述代码中,使用了 `ord()` 函数将字符转换为 ASCII 码,再使用 `hex()` 函数将 ASCII 码转换为十六进制数,并去掉前面多余的 `0x`。最后每个转换后的结果之间加上空格,方便查看结果。 使用上述代码,对于字符串 `Hello World!`,输出结果为 `48 65 6c 6c 6f 20 57 6f 72 6c 64 21 `。这就是字符串转十六进制后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值