我试图将一个C/C类转换成一个Java等效的。到目前为止还不错,但是我已经得到了这个代码,Java在抱怨。
// Isolate each byte in turn
cRecByte = lpszRec[ lRecByteCount++ ] & 0x00FF;
cRecByte是一个char
lpszRec是一个LPCSTR
lRecByteCount是一个long
这在C代码中工作,但在Java中不工作。
在我的Java代码中,我有完全相同的代码行,但有以下区别
cRecByte是一个char
lpszRec是一个字符串
lRecByteCount是一个long
我得到的错误(正如我所预料的)是
Type mismatch: cannot convert from int to char
Type mismatch: cannot convert from long to int
在某些情况下,我试图重新编写/模拟一个哈希函数,该函数是在20世纪80年代编写的,至今仍被我们的遗留系统使用。用新的东西替换它们将花费大量的开发/测试成本,所以我必须继续沿着这条路走下去。
我编写的代码旨在将每个字符从给定记录(文本行)中分离出来。
任何帮助都将不胜感激。
一些要求的代码——这是从C文件中得到的。我只做了我所能做的,因为实际的类相当大。
void CHashTotalFile::CalcRecHashTotal( /*[in]*/ LPCSTR lpszRec,
/*[in]*/ DWORD dwRecLen,
/*[in]*/ long lIteration,
/*[in,out]*/ UINT64& u64HashTotal,
SYSTYPE stType ) throw()
{
char cRecByte;
LPCSTR szNullReplacer = "CALCULATE HASH TOTAL";
const static int nLenNullReplacer = lstrlenA( szNullReplacer );
const static char szRandomMap[] = { 17,
5,
37,
31,
53,
19,
41,
7,
11,
2,
23,
3,
29,
47,
43,
13 };
// 64bit unsigned integer data types:
UINT64 u64ByteValue;
UINT64 u64Carry;
// long data types:
long lByteWord; // Used in u64ByteValue & offset to random map
long lRecByteCount; // Byte count within (actual) record - used as subscript to data
long lRecByteIndex; // Byte count within (logical) record - used in hashing calculations
// int data types:
int nAttempts;
int nByteDistance; // 'random' distance which rotates (right) the hash total
int nHashDistance; // 'random distance which rotates (left) the hash total
int nWordValue; // From data - offset to random map for hash distance
bool bGenerated = false;
// No exception calls or error logging here as efficiency is the name of the game!
// (or not so much inefficiency!)
// If text & this is a blank line (i.e. \n) set to record length to zero
if( m_fText && lpszRec[0] == NEWLINE_CHARACTER )
dwRecLen = 0;
// use dummy string where no data
if( dwRecLen == 0 )
{
lpszRec = szNullReplacer;
dwRecLen = nLenNullReplacer;
}
for( nAttempts = 0; (nAttempts <= MAX_HASH_ATTEMPTS) && !bGenerated; nAttempts++ )
{
// Loop around every byte in the record
for( lRecByteCount = lRecByteIndex = 0L; lRecByteCount < dwRecLen; lRecByteIndex++ )
{
// Isolate each byte in turn
cRecByte = lpszRec[ lRecByteCount++ ] & 0x00FF;
if( m_fText ) // If text
我在这里看到了多个不同的问题:
>
数组索引总是int
long l = 0;
int[] i = new int[] { 1, 2, 3 };
int res1 = i[l]; //Error: Type mismatch: cannot convert from long to int
int res2 = i[(int)l]; //works
字符串不能作为数组直接访问-您需要先将其转换为数组或使用访问器:
String testString = "TESTSTRING";
char c1 = testString[0]; //Error: The type of the expression must be an array type but it resolved to String
char c2 = testString.charAt(0); //works
char
和int
之间的操作的结果是int
——如果要将其存储为char
,则需要显式强制转换:
char c = 'h';
char var1 = c & 0x00FF; //Error: Type mismatch: cannot convert from int to char
char var2 = (char) (c & 0x00FF); //works
问题内容: C#中 var 关键字的一种用法是隐式类型声明。 var 的Java等效语法是什么? 问题答案: 空无一人。las,您必须输入完整的类型名称。 编辑:发布7年后,Java 10中添加了局部变量的类型推断(带有)。 编辑:发布6年后,从下面收集一些评论: C#使用关键字的原因是因为在.NET中可能有没有名称的Types。例如: 在这种情况下,不可能给赋予正确的类型。6年前,这在Java中
问题内容: 我正在开发Java程序,我确实需要能够以一定的频率和持续时间播放声音,类似于c#方法System.Beep,我知道如何在C#中使用它,但是我找不到用Java做到这一点的一种方法。是否有等效的方法或另一种方法? 问题答案: 我认为没有办法在便携式2 Java 中用“哔”声播放音乐1。您将需要使用我认为的API …除非找到可以为您简化事情的第三方库。 如果您想走这条路,那么此页面可能会给您
问题内容: 我是一名普通的C#开发人员,但有时我会使用Java开发应用程序。我想知道是否有Java等效于C#async / await?简单来说,java相当于什么: 问题答案: 不,在Java中-甚至在v5之前的C#中,都没有等效的异步/等待方式。 在后台构建状态机是一项相当复杂的语言功能。 Java中对异步/并发的 语言 支持相对较少,但是该软件包包含许多与此相关的有用 类 。(不完全等同于任
问题内容: 在C#中寻找与此方法相同的方法 问题答案: 在C#中超级简单:
问题内容: 我有以下用于加密的c ++代码片段: Java中的c ++加密等效于什么? 我看到有算法,然后我看到。 这与openssl加密有关。但不知道什么是等效的。本质上,我想要与c ++代码生成的输出相同的输出。 我问什么是等效的或在这里使用的加密名称是什么,所以我可以从那里得到它。 编辑:不要求任何人将代码转换为Java,而只是要求执行相同操作的相应程序包或类。 问题答案: 您要转换的代码使
问题内容: 我知道Java本身没有直接的等效项,但也许是第三方? 真的很方便。当前,我想实现一个迭代器,该迭代器生成树中的所有节点,这大约是带有yield的五行代码。 问题答案: 我知道的两个选项是2007年的Aviad Ben Dov的infomancers- collections库 和2008年的Jim Jimler的YieldAdapter库 (在另一个答案中也提到了)。 两者都允许您使用