将unsigned short转换为char
Convert unsigned short to char
我知道有其他类似的帖子,但我认为我的帖子是不同的。我想显示一组数字。然而,它被保存为unsigned short。因为它是从网络缓冲区给我的,所以我的所有数据都是无符号短格式。因此,对于以"ABC-"开头的序列号,两个无符号的短裤将保存0x4142和0x432D(已经是ASCII格式)。我需要将它们转换为char类型,以便使用printf和%s显示,但对于我的系统的其余部分,它们需要保持为unsigned short。这是我到目前为止所尝试的,但是输出是空白的:
unsigned char * num[3];
num[0] = (unsigned char*)(SYSTEM_N >> 8);
num[1] = (unsigned char*)(SYSTEM_N & 0x00FF);
printf("System Number: %s rn", num);
有谁能给我解释一下吗?谢谢!
有以下几个错误:1)数组太短;2)将数组定义为指针数组;3)没有结束字符串。
#include <stdio.h>
int main (void)
{
unsigned short system_m = 0x4142;
unsigned short system_n = 0x432D;
unsigned char num[5];
num[0] = system_m >> 8;
num[1] = system_m & 0xFF;
num[2] = system_n >> 8;
num[3] = system_n & 0xFF;
num[4] = ' ';
printf("System Number: %s rn", num);
return 0;
}
EDIT或者,如果您不想保留字符串,只需这样显示信息:
#include <stdio.h>
int main (void)
{
unsigned short system_m = 0x4142;
unsigned short system_n = 0x432D;
printf("System Number: %c%c%c%c rn",
system_m >> 8, system_m & 0xFF, system_n >> 8, system_n & 0xFF);
return 0;
}
程序输出:
System Number: ABC-
你可能想写
unsigned char num[3];
声明了一个包含三个char*
指针的数组。
也不要忘记设置结束NUL字符,在打印之前:
num[2] = ' ';
一般的解决方案可能是这样的,假设ushort_arr
包含一个数组中的unsigned short
s, ushort_arr_size
表示其大小。
char *str = malloc(ushort_arr_size * 2 + 1);
// check if str == NULL
int j = 0;
for (int i = 0; i < ushort_arr_size; i++) {
str[j++] = ushort_arr[i] >> 8;
str[j++] = ushort_arr[i];
}
str[j] = ' ';
printf("string is: %sn", str);
free(str);
如果您只想打印一次,那么在没有内存管理的情况下可能会更有效:
for (int i = 0, j = 0; i < ushort_arr_size; i++) {
putchar(ushort_arr[i] >> 8);
putchar(ushort_arr[i] & 0xFF);
}
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串