C++ 添加字符串和整数
C++ adding string and int
我的任务是将一个用 C++ 编写的小程序重写为 C#。
但是我遇到了我无法完全理解的这条线。是将字符串长度连接到字符串还是指针?
int n = _keyData * int(*(int*)(_chap + strlen(_chap) - 4));
这是变量:
short _ver = 12;
short _keyData = short(_ver * _ver);
char _chap[100]; // Hold time with format [%02d-%02d %02d:%02d:%02d:%03d]
*(int*)(_chap + strlen(_chap) - 4)
是一个严格的别名违规。将原始字节重新解释为 int
是类型双关语,在 C++ 中是不允许的(即使某些编译器容忍它)。
要修复它(假设是 little-endian 系统),您可以这样重写它:
short _ver = 12;
short _keyData = short(_ver * _ver);
char _chap[100]; // Hold time with format [%02d-%02d %02d:%02d:%02d:%03d]
int len = strlen(_chap);
int x = (int)(((unsigned)_chap[len - 1] << 24) |
((unsigned)_chap[len - 2] << 16) |
((unsigned)_chap[len - 3] << 8) |
(unsigned)_chap[len - 4]);
int n = _keyData * x;
巧合的是,现在将其移植到 C# 应该很容易。
我的任务是将一个用 C++ 编写的小程序重写为 C#。
但是我遇到了我无法完全理解的这条线。是将字符串长度连接到字符串还是指针?
int n = _keyData * int(*(int*)(_chap + strlen(_chap) - 4));
这是变量:
short _ver = 12;
short _keyData = short(_ver * _ver);
char _chap[100]; // Hold time with format [%02d-%02d %02d:%02d:%02d:%03d]
*(int*)(_chap + strlen(_chap) - 4)
是一个严格的别名违规。将原始字节重新解释为 int
是类型双关语,在 C++ 中是不允许的(即使某些编译器容忍它)。
要修复它(假设是 little-endian 系统),您可以这样重写它:
short _ver = 12;
short _keyData = short(_ver * _ver);
char _chap[100]; // Hold time with format [%02d-%02d %02d:%02d:%02d:%03d]
int len = strlen(_chap);
int x = (int)(((unsigned)_chap[len - 1] << 24) |
((unsigned)_chap[len - 2] << 16) |
((unsigned)_chap[len - 3] << 8) |
(unsigned)_chap[len - 4]);
int n = _keyData * x;
巧合的是,现在将其移植到 C# 应该很容易。