【发布时间】:2013-08-08 11:56:10
【问题描述】:
我有一项与另一个应用程序集成的服务,它只接受 21 个十六进制字符。我需要传递并接收一个包含 11 个十进制字符的字符串,例如:String s = "0101230154V";
我想知道,如何使用移位操作将其转换为位并传输,因为我无法将十进制字符串转换为十六进制,因为它会产生 22 个十六进制字符。我试过下面的代码。我认为可以进行六进制转换,但是当我尝试转换回十进制表示法时它不起作用,请给我其他值。我认为程序员 C#、C++ 和 Java 可以帮助我。
int n = 99; // 2^6 bits to use 99
int k = 999; // 2^9 bits to use 999
int bits = (n << 6) | (k << 9 << 6); // I'm not sure if it is ok to convert and use with hexa
var hexa = bits.ToString("X"); // I will transmit this hexa to a web service
在另一个项目中,我有一个 Windows 服务来从 Web 服务中读取 hexa。我可以正常阅读,但我不知道如何转换回十六进制值并以 n 和 k 值为例:
string hexa = GetFromWebService(); // get from the value from the web service here, its fine
// I will recieve the hexa and get the number in bits
int received = Int32.Parse(hexa, System.Globalization.NumberStyles.HexNumber);
// here I need to discover the N and K values... how?
如何发现n 和k 值?
最终解决方案
long v = 123456789456;
string h = v.ToString("X");
// trasmit h value
var data = long.Parse(hexaValueFromService, System.Globalization.NumberStyles.HexNumber);
谢谢
【问题讨论】:
-
你的问题让我有点困惑。您的示例
String s = "0101230154V";确实包含 11 个字符,但最后一个字符不是十进制的。这是笔误吗? -
我认为他的意思是十进制的 11。
-
字符串中允许使用哪些字符?显然,如果可以有 256 个选项(或更多),则不能将其编码为少于 22 个字符的十六进制字符串。
-
我更新了我的问题伙计们,我认为它更容易理解。 Tks
标签: c# java c++ bit-manipulation shift