- 主题:符号扩展,不小心就进坑
const char *bin 就进坑了,const unsigned char *bin 可以出坑
std::string bin_to_hex(const char *bin, const size_t len) {
std::string s;
for (size_t k = 0; k < len; k++) {
char buffer[3];
std::snprintf(buffer, sizeof(buffer), "%02x", bin[k]);
s += buffer;
}
return s;
}
--
FROM 114.241.228.*
const char *bin 还能是负数? 有中文?
【 在 z16166 的大作中提到: 】
: const char *bin 就进坑了,const unsigned char *bin 可以出坑
: std::string bin_to_hex(const char *bin, const size_t len) {
: std::string s;
: ...................
--
FROM 117.147.21.*
很多人已经忘记了char*本来是字符串的含义,扩大成了任意单字节类型。
【 在 txgx 的大作中提到: 】
: const char *bin 还能是负数? 有中文?
:
: 【 在 z16166 的大作中提到: 】
: ...................
--来自微水木3.5.10
--
FROM 120.204.180.*
猜测:
标准未规定 C++-串中单个字符是 signed char 还是 unsigned char
编译器有不同的实现
【 在 z16166 的大作中提到: 】
: const char *bin 就进坑了,const unsigned char *bin 可以出坑
: std::string bin_to_hex(const char *bin, const size_t len) {
: std::string s;
: ...................
--
FROM 120.253.228.*
目前只在arm有这个问题,其他应该都是默认signed char
【 在 easior 的大作中提到: 】
: 猜测:
: 标准未规定 C++-串中单个字符是 signed char 还是 unsigned char
: 编译器有不同的实现
--
FROM 124.64.23.*
最大的坑应该是用printf系列,而且格式串用%hhx才是对应char类型。
【 在 z16166 的大作中提到: 】
: const char *bin 就进坑了,const unsigned char *bin 可以出坑
: std::string bin_to_hex(const char *bin, const size_t len) {
: std::string s;
: ...................
--
FROM 114.246.237.*
RISC-V的ABI也是char is unsigned.
【 在 brucewww 的大作中提到: 】
: 目前只在arm有这个问题,其他应该都是默认signed char
--
FROM 114.246.237.*
vc编译器就有选项控制char有无符号
【 在 brucewww 的大作中提到: 】
: 目前只在arm有这个问题,其他应该都是默认signed char
: 【 在 easior 的大作中提到: 】
: : 猜测:
: ...................
--
FROM 114.249.209.*
【 在 z16166 的大作中提到: 】
: const char *bin 就进坑了,const unsigned char *bin 可以出坑
: std::string bin_to_hex(const char *bin, const size_t len) {
: std::string s;
: ...................
,bin[k]&255
--
FROM 221.218.62.*