所以我在项目中遇到了障碍。 我想要做的是找出一种方法来获取代表标志的四个单独的二进制字符。现在我的最后一项任务是拿下这四个标志并将它们放在一个并不困难的char []中。但现在,我想取四个并将其转换为十六进制。
例如:
O = 1;
C = 1;
Z = 0;
N = 0;
char flags[5];
flags[0] = O;
flags[1] = C;
flags[2] = Z;
flags[3] = N;
现在我想创建一个字符串或者我可以将上面的内容转换为Hex。所以例如我想将1100转换为十六进制,即0xC
现在我已经尝试先把它变成一个字符串,然后解析它,但我现在感到困惑和迷失。我只是看不到正确的输出。
答案 0 :(得分:2)
int flags;
flags = (O << 3) | (C << 2) | (Z << 1) | N;
sprintf(buffer, "0x%02X", 0xff & flags);
flags
定义了一个int
- 包含所有标志的变量。
buffer
是一个足够大的char数组。
在这种情况下不需要0xff & ..
,但如果你的flags变量可以变为负数并且你仍然只想输出一个字节(2个十六进制数字),那么可能有一天。
答案 1 :(得分:0)
unsigned char flags = 0; flags =((O <&lt; 3)|(C <2)|(Z <1)| N);
now flag包含您需要的Hex值。
答案 2 :(得分:0)
put flags [4] =“\ 0”
我们可以有一个新的变量char指针指向这个字符数组。
然后您可以使用sprintf(newArray[i], "%x", flags[i]);
这将在newArray字符串中将每个字符生成为HEX,我们可以通过打印字符串来获取输出。 printf("%s\n",newArray);
答案 3 :(得分:0)
您可以使用此代码将byte []转换为十六进制字符串
将char []转换为byte []或根据需要修改代码:)
/// <summary>
/// Converts a byte array to a hex string. For example: {10,11} = "0A 0B"
/// </summary>
public static string ByteToHex(byte[] data)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in data)
{
string hex = ByteToHex(b);
sb.Append(hex);
sb.Append(" ");
}
if (sb.Length > 0)
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
/// <summary>
/// Converts the byte to a hex string. For example: "10" = "0A";
/// </summary>
public static string ByteToHex(byte b)
{
string sB = b.ToString(ConstantReadOnly.HexStringFormat, CultureInfo.InvariantCulture);
if (sB.Length == 1)
sB = "0" + sB;
return sB;
}